2016-04-08 9 views
1

Verileri, bilgi içeren bir metin alanını ve durum sütununu sipariş eden sayısal bir sütuna sahip bir tablom var.Numaralandırılmış verileri bir Durum Sütununa göre yeniden sıralayacak bir Depolanmış Prosedürü nasıl yazabilirim?

item_num item status 
1   Plate new 
2   Cup  continued 
3   Fork new 
4   Spoon revised 

bir öğe "durdurulan" bir statü ile güncellenir, ben en fazla üyeye sahip bir "durdurulan" durumu ile tüm öğeleri koymak ve buna göre diğer öğeleri yeniden sıralamak item_num yeniden düzenlemek için listeyi gerekir. Ben Kupası'nı durdurma Yani, eğer, ben bu sonuçlanan tablosunu güncelleştirmek için bir saklı yordam gerekir:

item_num  item status 
1   Plate new 
2   Fork new 
3   Spoon revised 
4   Cup discontinued 

Sadece veri güncelleme ve duruma göre yeniden düzenlemek için bazı yön gerekiyor.

Microsoft SQL Server kullanıyorum. Item_num Birincil Anahtar değildir. Sahip olduğum problem, yapabildiğim şey ile sınırlı olduğum, çünkü masanın kendisinde herhangi bir değişiklik yapamayacağımı, Depolanmış bir Prosedür olmalı ve bu sayıları değiştirmek zorunda. Bu bir EHR'deki Tedavi Planı Hedefleri içindir. Tedavi Planı belgesi oluşturulduğunda, hedefleri Hedef Numarası (item_num) ile listeler. Yani bir kullanıcı bir hedefi durdurursa numaralandırma yanlıştır. Tedavi Planı "devam etmeyen" hedefleri göstermez. Böylece Hedefler 1,2,3,4'ten 1,2,4'e (eğer 3. golü kesersem) gider.

Elektronik Sağlık Kayıtları sisteminin ön ucu için geliştiriciyim. Bir kullanıcı bir düğmeye bastığında bu Saklanmış Prosedürün tetiklenmesi gerekir. Bu site benim için çok yardımcı oldu, ama ilk mesajım - muhtemelen onu karıştırdım. Özür.

+2

Başka sipariş kullanırsınız eski item_num yerine JOINitem_num

SELECT item_num, item, status, ROW_NUMBER() over (ORDER BY CASE WHEN STATUS = 'Discontinued' THEN 2 ELSE 1 END) as 'newnum' INTO #TEMP FROM TABLE 

yeni uygulanmış olan strateji görüntülendi, tüm item_num sütununu yeniden yazmazdınız. Status_id, status_text, view_order sütunlarını içeren 3. durum tablosunu düşünün; view_order sorguya göre bir sırayla kullanabileceğiniz bir sayıdır, –

+1

Hangi RDBMS'yi kullanıyorsunuz? – Aducci

+0

Bu, bir [XY Problemi] (http://meta.stackexchange.com/questions/66377/what-is-the-xy-problem) olabileceği gibi, niçin öğeleri yeniden numaralandırmanız gerekiyor? Birincil anahtar 'item_num' ise, bu kötü bir fikirdir. – jmoerdyk

cevap

0

Tüm satırlar distinct olduğu sürece, bunu gerçekleştirmek için ROW_NUMBER() kullanabilirsiniz. Eğer değilse, join'u işlemek için bir çeşit tuşa ihtiyacınız olacaktır.

İlk geçici tablosundaki her şeyi koymak ve yaratmak senin Ardından ana kadar geçici ve newnum

UPDATE ta 
SET ta.item_num = t.newnum 
FROM table ta 
JOIN #temp t on t.item_num = ta.item_num 
      AND t.item = ta.item 
      AND t.status = ta.status 
İlgili konular