我有一个要求,我必须检查记录,如果两个值都有记录,则flag设置为0,如果只存在一个值,则flag为1.
例如:
ID Value
1 'Season16'
2 'Season16'
2 'Season15'
3 'Season15'
3 'Season15'
4 'Season16'
现在我想要,
ID Flag
1 1
2 0
3 0
4 1
即。如果ID同时包含Season16和Season 15,则Flag为0,否则为1。
你们能倒出你的想法吗?
答案 0 :(得分:0)
这是非常具体的表结构和可能的季节数,但这是一种方式:
select
Id,
case
when count(1) > 1 then 0
else 1
end Flag
from MyTable
group by Id
答案 1 :(得分:0)
以下是使用多个CTE的示例。前两个为每个特定原因构建表。如果值列表中有两个季节,则最终选择将返回带有标志集的所有ID。
WITH CTE16 AS (SELECT * FROM @myTable WHERE Value = 'Season16'),
CTE15 AS (SELECT * FROM @myTable WHERE Value = 'Season15')
SELECT DISTINCT A.ID,
CASE WHEN B.Flag IS NULL THEN 1 ELSE 0 END [Flag]
FROM @myTable A LEFT OUTER JOIN (SELECT A.ID, 1 [Flag]
FROM CTE16 A INNER JOIN CTE15 B
ON A.ID = B.ID) B
ON A.ID = B.ID
答案 2 :(得分:0)
使用case语句时。希望这会回答你的问题。您可以通过提供有关您的桌子的更多信息来帮助每个人。
Select
Value1, value2,
Case when value1 = value2 then 0 else 1 end as Flag
from Values_Table