2016-04-25 167 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