显示DISTINCT情况,其中为NULL

时间:2014-11-05 18:13:03

标签: sql sql-server

我试图找出在两列中只有null值的所有记录。我遇到的问题是

我有565行包含ID,Allegation1,指控2,日期,concatenatedalleg12 所以它显示为

ID    ALLEG1    ALLEG2    DATE    CONCATENATED
1     NULL      NULL      DATE1   NULL
1     NULL      A1        DATE1   A1
1     A2        NULL      DATE1   A2
2     NULL      NULL      DATE2   NULL
2     NULL      B1        DATE2   B2
3     NULL      NULL      DATE3   NULL
4     NULL      NULL      DATE4   NULL
5     NULL      NULL      DATE5   NULL
5     NULL      C1        DATE5   C1     

我只想展示:

ID    ALLEG1    ALLEG2    DATE    CONCATENATED
3     NULL      NULL      DATE3   NULL
4     NULL      NULL      DATE4   NULL

如何只获得只有一行空值的不同情况,而不包括也包含非空2+行的1 2和5空行。

4 个答案:

答案 0 :(得分:3)

WITH idswithonerow AS
(
   SELECT ID FROM
   (
      SELECT ID, 
             COUNT() OVER (PARTITION BY ID) AS CN
      FROM tablename   
   ) as tmp 
   WHERE CN = 1
)
  select ID, ALLEG1, ALLEG2, DATE, CONCATINATED
  FROM tablename
  WHERE ALLEG11 is null and ALLEG2 is null
  AND ID IN SELECT ID FROM idswithonerow

答案 1 :(得分:0)

鉴于您只需要显示NULL占位符,您可以执行以下操作:

select ID
     , null as ALLEG1
     , null as ALLEG2
     , DATE
     , null as CONCATENATED
from yourTable
where ALLEG1 is null and ALLEG2 is null
group by ID, DATE;

当然,如果您可以简单地忽略这些列,事情会变得更简单:

select ID
     , DATE
from yourTable
where ALLEG1 is null and ALLEG2 is null
group by ID, DATE;

然后,您可以处理前端

中所需的列

答案 2 :(得分:0)

 SELECT 
    ID,
    MAX(ALLEG1) AS ALLEG1,
    MAX(ALLEG2) AS ALLEG2,
    MAX([DATE]) AS [DATE],
    MAX(CONCATENATED) AS CONCATENATED
 FROM 
    @TBL
 GROUP BY 
    ID
 HAVING
    SUM(CASE WHEN ALLEG1 IS NULL THEN 0 ELSE 1 END + CASE WHEN ALLEG2 IS NULL THEN 0 ELSE 1 END) = 0

答案 3 :(得分:0)

尝试使用此查询

select *
from xxx
where ((ALLEG1 is not  null) and (ALLEG2 is null) and (DATE is null) and (CONCATENATED is null))
or
((ALLEG1 is  null) and (ALLEG2 is not null) and (DATE is  null) and (CONCATENATED is  null))
or
((ALLEG1 is  null) and (ALLEG2 is  null) and (DATE is not null) and (CONCATENATED is  null))
or
((ALLEG1 is  null) and (ALLEG2 is  null) and (DATE is  null) and (CONCATENATED is not null))


having count(id)=1