我试图找出在两列中只有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空行。
答案 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