2017-12-21 20 views
0

以下、col_Aのバージョンとcol_Bのバージョンを比較し、似ている場合はtrueを返します。1つの値と結果を返す値のバージョンを比較するtsql

私が達成しようとしています何
Col_A | Col_B | Col_C | 
--------------------------- 
val1 | versionA | true | 
val1 | versionB | false | 
val1 | versionC | false | 
----------------=---------- 
val2 | versionA | false | 
val2 | versionB | false | 
val2 | versionC | false | 

、Col_AとCol_Bの間に1つの比較ですがtrueを返す場合で、上を移動するので、上記の表のようになります。ここでは

Col_A | Col_B | 
---------------- 
val1 | true | 
---------------- 
val2 | false | 

は私の思考プロセスと例です私は本当にここからどこに行くのか分からないことを除いて、質問。

SELECT Col_A, Col_B, 
     case when Col_A = Col_B then 'true' else 'false end as Col_C --returns the first table 
FROM exTable 

IFシナリオは、このシナリオでは2番目のテーブルを取得するのに適していますか?

+1

あなただけCol_A BY exTableグループからCol_A、MAX(Col_B)を選択することができない理由はありますか? – EdmCoff

+1

前のコメントで、私はexTableにあなたの真偽の列があると仮定していました。あなたがまだCol_Cを持っていない場合、私は何を意味したのかと思います.Col_A = Col_Bの場合は 'true' else else 'false end)FROM exTable GROUP BY Col_A – EdmCoff

+0

@EdmCoffそれは動作します – Travis

答えて

1

CASEを使用して比較結果を計算し、次にMAXを使用してグループ化することができます。

WITH exTable AS (
    SELECT * FROM (
     VALUES 
      ('val1', 'val1'), 
      ('val1', 'versionB'), 
      ('val1', 'versionC'), 
      ('val2', 'versionA'), 
      ('val2', 'versionB'), 
      ('val2', 'versionC') 
     ) AS a (Col_A, Col_B) 
) 
SELECT Col_A, 
     CASE MAX(case when Col_A = Col_B then 1 else 0 end) WHEN 1 THEN 'true' ELSE 'false' END as Col_C 
FROM exTable 
GROUP BY Col_A 
0
WITH exTable AS (
     SELECT * FROM (
      VALUES 
       ('val1', 'versionA','true'), 
       ('val1', 'versionB','false'), 
       ('val1', 'versionC','false'), 
       ('val2', 'versionA','false'), 
       ('val2', 'versionB','false'), 
       ('val2', 'versionC','false') 
      ) AS a (Col_A, Col_B,Col_C) 
    ) 

    --select * from exTable 
    SELECT Col_A, 
      CASE MAX(case when Col_C = 'true' then 1 else 0 end) WHEN 1 THEN 'true' ELSE 'false' END as Col_C 
    FROM exTable 
    GROUP BY Col_A 
関連する問題