2016-04-14 69 views
1

için bir prosedür oluşturmaI C_CASE adında bir tablo var masanın

Case_ID Case_Details Case_Status Section_Of_Law 
------------------------------------------------------ 
333   Hit and Run  Pending  304(A) 
444   Robbery   Closed  392 
555   Extortion  Pending  384 
222   Murder   Closed  302 
323   Murder   Pending  304(A) 
123   Robbery   Pending  392 
336   Extortion  Closed  384 
567   Murder   Closed  302 

Amacım bir prosedür yaratmak olduğunu çıktısı Belirli bir Case_Details için bekleyen ve kapatılan Case_Statuses sayısı. Bunun için doğru mantığı almıyorum

Pending  Closed 
------------------- 
    1   2 

:

Örneğin

giriş CİNAYET ise, o zaman ben çıkış olarak bir şey olmak istiyorum.

create procedure StatusCount 
    @acc varchar(40) 
as 
    select 
     count(Case_Status) 
    from 
     C_Case 
    where 
     @acc = 'Pending' 
     and @acc = 'Closed' 
go 

drop procedure StatusCount 

exec StatusCount 'Robbery'; 

ama hiç çıktı almak, yardım lütfen:

Ben SQL iyi değilim, ben gerçekten

Benim prosedür kodudur yardıma ihtiyaç, çok denedim.

+0

Bir yordamı hemen bıraktıktan sonra bir yordam yürütmeye çalışıyorsunuz. Ayrıca, 'acc = 'Beklemede' ve @ acc = 'Kapalı', hiçbir zaman hiçbir şeyi tatmin etmeyecektir. – Quassnoi

+0

Yanlış olduğumu biliyorum, lütfen bana mantığın nasıl bir şey olması gerektiğini söyler misiniz? –

cevap

1

Yani hataların çift ..

Bir: Eğer çalıştırılmadan önce prosedürü düştü. İki: sorgu sorgu için yanlış

create procedure StatusCount (@acc varchar(40)) 
as 
begin 
    select 
     sum(case when Case_Status = 'Pending' then 1 else 0 end) Pending, 
     sum(case when Case_Status = 'Closed' then 1 else 0 end) Closed -- removed comma, there was an extra comma causing syntax issue 
    from 
     C_Case 
    where 
     Case_Details = @acc 
end 
go 

exec StatusCount 'Robbery'; 
--drop below proc 

drop procedure StatusCount` 

Açıklama geçerli: yüzden Case_Details belirli bir türü için veri gerekir

,

where Case_Details = @acc 

Ve Pending ve Closed vaka saymak gerekir Tek bir satırda, numaralı tüm satırlarda sum() yapıyoruzAma case_status bir maç sadece bir satır saymak gerekir, bu nedenle bekleyen dosyaları

anlamıyla 1 yalnızca verir iç kutu ifade sonucuna dayanarak toplamı tüm satırın değer anlamına gelir
sum(case when Case_Status = 'Pending' then 1 else 0 end) Pending 

sayılması için böyle bir case when then end mantık Durum 0 aksi halde beklemede .. Yani net tüm bekleyen satırları saymak

+0

Mantığı anlamadım. Açıklamak ister misin? S.S: KODUNU ÇALIŞTIRDI VE BANA GİDİN "KENDİNDEN ANAHTAR SÖZDEN DOKUNUYOR" –

+0

@pratikwatwani güncellenmiş yanıt – DhruvJoshi

+0

Bu adam yardımcı oldu! Bir ton teşekkürler. Yani şimdi biraz daha mantık ve temeller üzerinde çalışmam gerek. Teşekkür ederim. –