2013-02-28 91 views
1

獲得的屬性我有一個像下面SQL服務器從彙總

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-代碼= EndProd代碼數據表。但是,如果它們不同,我想覆蓋來自EndProd代碼行的值Rollup1和Rollup2

帶有上述數據的查詢運行示例如下。參見PROD-代號P300的彙總如何重寫從P100的彙總值,因爲它有EndProd碼

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

對於「匹配」行,'EndProd-Code'是** unique **嗎? – 2013-03-01 00:07:00

+0

如果這是SQL服務器(按標題),你可以標記它。 – Kaf 2013-03-01 00:23:28

回答

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

+0

這可能是'案件'而不是'如果'。 (用戶沒有標記它,但標題說sql服務器) – Kaf 2013-03-01 00:21:16

+0

@Kaf - 是的,修復。 – 2013-03-01 00:31:36

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