Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 在处理案件时整理身份证_Sql_Sql Server - Fatal编程技术网

Sql 在处理案件时整理身份证

Sql 在处理案件时整理身份证,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

当我有一张像这样的桌子时,如何分类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 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;