Sql 在处理案件时整理身份证
当我有一张像这样的桌子时,如何分类IDSql 在处理案件时整理身份证,sql,sql-server,Sql,Sql Server,当我有一张像这样的桌子时,如何分类ID CAR ID COLOR 1 Red 1 Black 2 BLUE 2 Black 3 Yellow 3 Red 我的目标是,所有具有“红色”颜色的ID都被抛出,因此我的结果就是ID=2。使用我的SQL,我可以找到带有红色的ID(带有Filter=1),但它们仍然会出现,因为ID=1也可以有黑色(或者ID=3可以有黄色),这样Filter=0就可以通过 with SORTO
CAR
ID COLOR
1 Red
1 Black
2 BLUE
2 Black
3 Yellow
3 Red
我的目标是,所有具有“红色”颜色的ID都被抛出,因此我的结果就是ID=2
。使用我的SQL,我可以找到带有红色的ID(带有Filter=1
),但它们仍然会出现,因为ID=1
也可以有黑色(或者ID=3可以有黄色),这样Filter=0
就可以通过
with SORTOUT as
(
ID,
CASE WHEN
COLOR = RED THEN 1
ELSE 0
END AS FILTER
FROM TABLE
)
SELECT * FROM ID_TABLE T1
JOIN SORTOUT T2 on (T1.ID = T2.ID)
WHERE FILTER = 0
如果只需要id,请使用聚合:
select id
from id_table
group by id
having sum(case when color = 'RED' then 1 else 0 end) = 0;
如果需要原始行,可以使用不存在
:
select i.*
from id_table i
where not exists (select 1
from id_table i2
where i2.id = i.id and i2.color = 'RED'
);
您可以使用简单的选择查询来实现这一点
SELECT * FROM ID_TABLE WHERE COLOR != 'Red';
如果您仍然需要CASE
语句,您可以使用下面的
SELECT ID, COLOR,
CASE WHEN COLOR = 'Red' THEN 1 ELSE 0 END AS Val
FROM ID_TABLE WHERE CASE WHEN COLOR = 'Red' THEN 1 ELSE 0 END = 0;
或
这些查询不会只返回2次,您可能会发布预期结果。这对你很有帮助,他写道:“…所以ID=2就是我的结果”谢谢你,戈登,第一个SQL似乎合适,即使我不完全理解having sum()-行。@TEC23。这是计算其中有
红色“
的行数。=0
表示没有。
SELECT ID, COLOR FROM
(SELECT ID, COLOR,
CASE WHEN COLOR = 'Red' THEN 1 ELSE 0 END AS Val
FROM ID_TABLE) qry
WHERE Val = 0;