SQL 服务器 2014 查询

SQL Server 2014 queries

我有一个要求,我必须检查记录,如果两个值都存在记录,则标志设置为 0,如果只有一个值存在,则标志为 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 同时具有第 16 季和第 15 季,则 Flag 为 0,否则为 1。

你们能说说你们的想法吗?

这对于您的 table 结构和可能的季节数非常具体,但这是一种方式:

select 
    Id,
    case 
        when count(1) > 1 then 0 
        else 1
    end Flag
from MyTable
group by Id

这是一个使用多个 CTE 的示例。前两个为每个特定原因构建表格。如果值列表中有两个季节,则最后的 select 将 return 所有设置了标志的 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 

使用 case when 语句。希望这会回答你的问题。你可以通过提供更多关于你的 table 的信息来帮助每个人。

Select 
    Value1, value2, 
    Case when value1 = value2 then 0 else 1 end as Flag 
from Values_Table