Tsql 如何在sqlserver中实现以下输出?
输入 表1:标题Tsql 如何在sqlserver中实现以下输出?,tsql,sql-server-2008-r2,Tsql,Sql Server 2008 R2,输入 表1:标题 ID ITEMNAME COST 1 MIXEE 1800 2 REFRIZIRATOR 12000 表2:详情 DID DITEMNAME DLINE DCOST 1 MIXEE 1 900 2 MIXEE 2 900 3 REFRIGIRATOR 1 9000 4 REFRIGIRATOR 2 1000 预期产量 DET
ID ITEMNAME COST
1 MIXEE 1800
2 REFRIZIRATOR 12000
表2:详情
DID DITEMNAME DLINE DCOST
1 MIXEE 1 900
2 MIXEE 2 900
3 REFRIGIRATOR 1 9000
4 REFRIGIRATOR 2 1000
预期产量
DETAILS
DID DITEMNAME DLINE DCOST
1 MIXEE 1 900
2 MIXEE 2 900
3 REFRIGIRATOR 1 12000
4 REFRIGIRATOR 2 0
说明:标题表将包含汇总汇总或行级信息,或者包含准确信息,而明细表可能不包含准确的成本信息
所以,如果标题表成本和明细表成本之和相同,那么我需要保留记录,因为它是另一种方式,我需要使第一行级别的值是标题表的成本,下一行应该为零
像这样,我确实有大约80条lacs记录在细节表中。好的,所以我想我知道了。如果需要调整,请告诉我 你的桌子 实际查询
以下是您如何做到这一点:
SELECT d.ID, d.DITEMNAME, d.DLINE,
CASE WHEN SUM(d.DCOST) OVER(PARTITION BY d.DITEMNAME) = h.COST
THEN d.DCOST
ELSE CASE WHEN d.DLINE = 1 THEN h.COST ELSE 0 END END AS DCOST
FROM Header h
JOIN Details d ON h.ITEMNAME = d.DITEMNAME
非常感谢Stephan,并按照预期工作,感谢您的帮助。我不能投你的票,因为它显示的信息就像我需要至少15个声望来投票。哦,别担心,我明白了!您应该能够将我的答案标记为答案,这样其他人就知道您的问题已经得到了回答。SQL 2008 R2支持SUM OVER()吗?哦,我还以为只有2012年及以上呢。谢谢你的提示!
SELECT D.ID,
D.DiteName,
D.Dline,
CASE
WHEN H.Cost = sum_DCost THEN DCost
ELSE CASE
WHEN D.ID = CA.min_ID THEN H.Cost
ELSE 0
END
END AS DCost
FROM @Details AS D
CROSS APPLY (
SELECT DiteName,SUM(DCost) sum_DCost,MIN(ID) min_ID
FROM @Details
WHERE DiteName = D.DiteName
GROUP BY DiteName
) CA
INNER JOIN @Header AS H
ON D.DiteName = H.ItemName
SELECT d.ID, d.DITEMNAME, d.DLINE,
CASE WHEN SUM(d.DCOST) OVER(PARTITION BY d.DITEMNAME) = h.COST
THEN d.DCOST
ELSE CASE WHEN d.DLINE = 1 THEN h.COST ELSE 0 END END AS DCOST
FROM Header h
JOIN Details d ON h.ITEMNAME = d.DITEMNAME