Sql 如何检查某个值是否存在?
我有一个名为CUR_VALID的历史化表。这张桌子看起来像这样:Sql 如何检查某个值是否存在?,sql,sql-server,Sql,Sql Server,我有一个名为CUR_VALID的历史化表。这张桌子看起来像这样: ID CUR_VALID 1 N 1 N 1 Y 2 N 2 Y 3 Y 对于每个ID,都需要一个Y。如果没有Y或多个Y,则有问题。检查是否有多个Y的状态。现在我只需要检查每个ID是否存在一个Y。我只是不知道该怎么做。这就是我目前所拥有的。那么如何检查值“Y”是否存在 SELECT Count(1) [Number of N] ,MAX(CUR_VALID = 'N') ,[BI
ID CUR_VALID
1 N
1 N
1 Y
2 N
2 Y
3 Y
对于每个ID,都需要一个Y。如果没有Y或多个Y,则有问题。检查是否有多个Y的状态。现在我只需要检查每个ID是否存在一个Y。我只是不知道该怎么做。这就是我目前所拥有的。那么如何检查值“Y”是否存在
SELECT Count(1) [Number of N]
,MAX(CUR_VALID = 'N')
,[BILL_ID]
,[BILL_MONTH]
,[BILL_SRC_ID]
FROM db.dbo.table
GROUP BY [BILL_ID]
,[BILL_MONTH]
,[BILL_SRC_ID]
Having MAX(CUR_VALID = 'N') > 1
此查询返回的值既没有至少一个“Y”值,也有多个“Y”值ID 首先,汇总Y值并与每个id相关,然后从该表中选择非1个
select * from (
select ID, SUM(case when CUR_VALID = 'Y' then 1 else 0 end) as CNT
from table
group by ID
) b where b.CNT <> 1
此查询返回的值既没有至少一个“Y”值,也有多个“Y”值ID 首先,汇总Y值并与每个id相关,然后从该表中选择非1个
select * from (
select ID, SUM(case when CUR_VALID = 'Y' then 1 else 0 end) as CNT
from table
group by ID
) b where b.CNT <> 1
以下查询将为您提供不满足完整性条件的id列表:对于每个id,需要有一个Y。如果没有Y或多个Y,则存在错误
以下查询将为您提供不满足完整性条件的id列表:对于每个id,需要有一个Y。如果没有Y或多个Y,则存在错误
当你对“Y”感兴趣时,为什么还要摆弄“N” 使用条件聚合获取您感兴趣的值的计数
SELECT
COUNT(*) AS number_of_all,
COUNT(CASE WHEN cur_valid = 'Y' THEN 1 END) AS number_of_y,
COUNT(CASE WHEN cur_valid = 'N' THEN 1 END) AS number_of_n,
bill_id,
bill_month,
bill_src_id,
FROM db.dbo.table
GROUP BY bill_id, bill_month, bill_src_id;
添加HAVING子句以获得唯一有效的
HAVING COUNT(CASE WHEN cur_valid = 'Y' THEN 1 END) = 1
或无效
HAVING COUNT(CASE WHEN cur_valid = 'Y' THEN 1 END) <> 1
比尔。当你对“Y”感兴趣时,为什么还要摆弄“N” 使用条件聚合获取您感兴趣的值的计数
SELECT
COUNT(*) AS number_of_all,
COUNT(CASE WHEN cur_valid = 'Y' THEN 1 END) AS number_of_y,
COUNT(CASE WHEN cur_valid = 'N' THEN 1 END) AS number_of_n,
bill_id,
bill_month,
bill_src_id,
FROM db.dbo.table
GROUP BY bill_id, bill_month, bill_src_id;
添加HAVING子句以获得唯一有效的
HAVING COUNT(CASE WHEN cur_valid = 'Y' THEN 1 END) = 1
或无效
HAVING COUNT(CASE WHEN cur_valid = 'Y' THEN 1 END) <> 1
账单。据我所知,您希望获得完整性检查通过的所有id。完整性检查意味着,CUR_VALID表中只有一行CUR_VALID值等于Y 这可以通过GROUPBY子句实现:
据我所知,您希望获得完整性检查通过的所有id。完整性检查意味着,CUR_VALID表中只有一行CUR_VALID值等于Y 这可以通过GROUPBY子句实现:
Yor语法看起来像SQL Server,不像mysql。也许您应该更改标记或语法,使其看起来像SQL Server,而不是mysql。也许你应该改变标记,当你想计算行数时,我会把它计算在内。countexpression只统计非null的出现次数,但是CUR_VALID.CUR_VALID不能为null,因为您的WHERE子句。因此,使用countCUR\u VALID.CUR\u VALID会使查询看起来比实际情况更复杂,并降低可读性。没错!最好在有子句时写count*,当你想计算行数时,我会计算它。countexpression只统计非null的出现次数,但是CUR_VALID.CUR_VALID不能为null,因为您的WHERE子句。因此,使用countCUR\u VALID.CUR\u VALID会使查询看起来比实际情况更复杂,并降低可读性。没错!最好在有克劳塞戈德答案时写上count*。工作完美。“N”背后的想法是只数1条记录。如果这个记录是N,我就知道这是一个错误,因为需要有一个Y。不管怎样,你的答案是完美的:好答案。工作完美。“N”背后的想法是只数1条记录。如果这个记录是N,我就知道这是一个错误,因为需要有一个Y。无论如何,你的答案是完美的: