TSQL:如何确保一个ID有多行?

时间:2016-03-29 13:14:50

标签: sql-server tsql sql-server-2014

我需要确保每个IncidentID都有2个特定ResponseCodes(201 AND 204)。如何识别不具有201和204的IncidentID,如下图所示?

数据集

enter image description here

我想在数据集中识别

enter image description here

所需的结果集

enter image description here

SQL Fiddle对我不起作用,但测试代码如下:

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

谢谢!

2 个答案:

答案 0 :(得分:5)

试试这个:

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

此查询将选择IncidentID值等于ResponseCode201的{​​{1}}值,但不能同时选择。{/ p>

答案 1 :(得分:1)

您可以尝试使用GROUP BYHAVING条款,如下所示:

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