2016-04-25 28 views
0

私はレコードをチェックする必要があり、レコードが両方の値に対して存在する場合、フラグは0に設定され、フラグが1つのみの場合はフラグが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がSeason16とSeason 15の両方を持つ場合、フラグは0です。その他1。

あなたはあなたの考えを注ぐことができますか?

+2

私は 'select'クエリを提案しています... –

+0

これは常に2つの値(Season15とSeason16)だけでしょうか? – Steven

+0

Nope。それは多くの季節になる可能性がありますが、値=最大(季節)と値<>最大(季節)-1を選択する必要があります。私はどうにかして最大値と以前の値を得ることができます。フラグを設定することはできません。 – chits

答えて

0

これは、あなたのテーブル構造と季節の可能な数に非常に具体的であるが、これは一つの方法である:ここでは

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

は、複数のCTEを使用した例です。最初の2人はそれぞれの特定の理由のためにテーブルを構築します。最後の選択は、値リストに両方のシーズンがあった場合にフラグが設定されたすべての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

ステートメントがある場合を使用します。うまくいけば、これはあなたの質問に答えます。あなたはあなたのテーブルに関する情報を少しずつ与えることで、皆さんを助けることができます。

Select 
    Value1, value2, 
    Case when value1 = value2 then 0 else 1 end as Flag 
from Values_Table 
関連する問題