2016-03-29 23 views
4

Her IncidentID ürününün 2 özel ResponseCodes (201 VE 204) olduğundan emin olmamız gerekir. Aşağıdaki resimlerde görüldüğü gibi, 201 ve 204'e sahip olmayan bir IncidentID'u nasıl tanımlarım?TSQL: Bir ID'nin birden çok satıra sahip olması nasıl sağlanır?

:

Veri Seti ben verilerde tanımlamaya çalışıyorum ne

enter image description here

İstenilen sonuç kümesi

enter image description here set

enter image description here

SQL Fiddle benim için işe yaramaz, fakat test kod aşağıda:

CREATE TABLE DIS (
IncidentID NUMERIC, 
ResponseCode NUMERIC, 
ResponseCodeDescription varchar(30) 
) 

INSERT INTO DIS (IncidentID, ResponseCode, ResponseCodeDescription) 
VALUES 
     ('999888', '201', 'OSS'), 
     ('999888', '204', 'Long Term OSS'), 
     ('888777', '201', 'OSS'), 
     ('888777', '204', 'Long Term OSS'), 
     ('777666', '204', 'Long Term OSS'), 
     ('555444', '201', 'OSS'), 
     ('555444', '204', 'Long Term OSS') 

SELECT 
    IncidentID 
, ResponseCode 
, ResponseCodeDescription 
FROM DIS 

teşekkür ederiz!

cevap

5

:

SELECT IncidentID 
FROM DIS 
WHERE ResponseCode IN (201,204) 
GROUP BY IncidentID 
HAVING COUNT(DISTINCT ResponseCode) < 2 

Bu sorgu IncidentID değerleri 201 veya 204 ya eşit bir ResponseCode değeri olan seçecektir ama ikiside değil.

+0

Neden vaka ifadesi? – sagi

+0

@sagi Evet haklısınız, gereksizdir. –

+0

Teşekkür ederiz @Giorgos Betsos! Örneğiniz ve özellikle açıklamalarınız çok takdir ediliyor! – JM1

1

Böyle GROUP BY ve HAVING cümleleri kullanmayı deneyebilirsiniz: Deneyin bu

SELECT IncidentID 
FROM yourtable 
WHERE ResponseCode IN (201,204) 
GROUP by IncidentID 
HAVING COUNT(DISTINCT IncidentID) < 2 
+1

Ve daha sonra 2 olay kimliği var mı? Veya bu konuyla ilgili kopyalar – sagi

+0

Teşekkürler @Rahul. Soruyu düzenlediğini gördüm. Verileri yanlış girdim mi? Verileri girmek için daha iyi bir yol var mı? – JM1

+1

@ JM1: - Başlangıçta biçimlendirilmediğinden beri düzenledim. ama daha sonra biçimlendirdiğinden bu yana düzgün görünüyor :) –

İlgili konular