SQL Server 2014查询

时间:2016-04-25 19:04:21

标签: sql-server sql-server-2014 flags

我有一个要求,我必须检查记录,如果两个值都有记录,则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。

你们能倒出你的想法吗?

3 个答案:

答案 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