Tsql 如何在sqlserver中实现以下输出?

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

输入

表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
预期产量

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