2016-04-25 139 views
0

我有一个要求,我必须检查记录,如果两个值的记录都存在,那么flag设置为0,如果只存在一个值,那么flag是1。SQL Server 2014查询

例如:

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,则标志为0否则为1.

你们可以倾注你的想法吗?

+2

我会建议一个'select'查询... –

+0

它会永远只是这两个值(第15季和第16季)吗? – Steven

+0

没有。它可以是很多季节..但我必须选择价值=最大(季节)和价值<>最大(季节)-1。我能以某种方式获得最大和以前的值。但无法设置标志。 – chits

回答

0

这是非常具体的,以你的表结构和尽可能多的季节,但是这是一个办法:

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

下面是使用多个热膨胀系数的例子。前两个为每个特定的原因建立表格。如果在值列表中同时存在四个季节,则最终选择将返回标记设置的所有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 
0

在声明时使用一个case。希望这会回答你的问题。您可以通过提供更多关于餐桌的信息来帮助每个人。

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