1

以下のようなデータテーブルがあります

Prod-Code Name              Rollup1 Rollup2 EndProd-Code
--------- ----------------- ------- ------- ------------
P100      Potatoes          P2         P3   P100
P200      Potatoes GS       P4         P5   P200
P300      Potatoes GSS      P1         P6   P100

私がやりたいのは、Prod-Code=EndProd-Codeのように行をそのままフェッチするクエリを作成することです。しかし、それらが異なる場合は、Rollup1とRollup2の値をEndProd-Code行からの値でオーバーライドしたいと思います。

上記のデータを使用したクエリの実行例は、以下のようになります。Prod-Code P300のロールアップが、EndProd-Codeを持っているため、P100からのロールアップ値でどのようにオーバーライドされるかを確認してください。

Prod-Code Name              Rollup1 Rollup2 EndProd-Code
--------- ----------------- ------- ------- ------------
P100      Potatoes          P2      P3      P100
P200      Potatoes GS       P4      P5      P200
P300      Potatoes GSS      P2      P3      P100
4

2 に答える 2

2
SELECT p.ProdCode, p.Name, CASE WHEN p.ProdCode=p.EndProdCode THEN p.Rollup1 ELSE pm.Rollup1 END [Rollup1],
       CASE WHEN p.ProdCode=p.EndProdCode THEN p.Rollup2 ELSE pm.Rollup2 END [Rollup2]
FROM ProdTable p
JOIN ProdTable pm ON (pm.ProdCode=pm.EndProdCode and p.EndProdCode=pm.EndProdCode)
ORDER BY p.ProdCode;

SQLフィドル:http ://sqlfiddle.com/#!3/fb6b5 / 3

于 2013-03-01T00:15:16.500 に答える
0

Prod-Code列が主キーである(または少なくとも一意である)と仮定すると、次のようにうまくいくはずです。

select ProdCode    = t1.ProdCode ,
       Name        = t1.Name     ,
       Rollup1     = coalesce( t2.Rollup1 , t1.Rollup1 ) ,
       Rollup2     = coalesce9 t2.Rollup2 , t2.Rollup2 ) ,
       EndProdCode =  t1.EndProdCode
from      myTable t1
left join myTable t2 on t2.ProdCode  = t1.EndProdCode
                    and t2.ProdCode != t1.ProdCode
于 2013-03-01T00:44:24.410 に答える