【发布时间】:2020-05-05 14:15:25
【问题描述】:
当我查询多个表格/视图并将结果放入#Temp(我使用 MS SQL SERVER 2014)时,我得到以下结果
问题是我无法在每个组织的 1 行中获取所有相关数据。对于每一个“额外”值,我都会得到一个新行,因此您会得到多行,这会产生一个未处理的结果。
Rows |OrgNumb|OrgNam |ProdNam| ValDec |AttrC | AttrV |
1 | 115 | Org1 | Acc | 1.00 | Number | 09133444 |
2 | 115 | Org1 | Acc | 1.00 | SBI | 1089 |
3 | 115 | Org1 | Fac | 1.00 | Number | 09133444 |
4 | 115 | Org1 | Fac | 1.00 | SBI | 1089 |
5 | 115 | Org1 | Rel | 1.00 | Number | 09133444 |
6 | 115 | Org1 | Rel | 1.00 | SBI | 1089 |
7 | 119 | Org2 | Ord | 1.00 | Number | 05558794 |
8 | 119 | Org2 | Ord | 1.00 | SBI | 1089 |
我需要这个结果:
Rows |OrgNum |OrgNam|ProdN1|ValDec1|ProdN2|ValDec2|ProdN3|ValDec3|AttrC1 |AttrV1 |AttrC2 |AttrV2|
1 | 115 | Org1 | Acc | 1.00 | Fac | 1.00 | Rel | 1.00 |Number | 09133444 | SBI | 1089 |
2 | 119 | Org1 | Ord | 1.00 | | | | |Number | 05558794 | SBI | 1089 |
还有更多列,但这些是 atm 必不可少的列,与此示例不同,并非每个属性 (AttrC1) 都有值。
我做了一些有类似目的的东西,但源数据要简单得多(代码如下)。所以我做的第一件事就是在下面的查询中建立它,但它返回了错误的数据。然后我用 Pivot, stuff/XML PATH 尝试了它,但它们都没有给我正确的结果。我查看了@countles 示例,但没有一个可以帮助我。
SELECT Period, Debitor,
MAX( CASE WHEN RN = 1 THEN Product ELSE NULL END ) AS Product1,
SUM( CASE WHEN RN = 1 THEN Amount ELSE NULL END ) AS Amount1,
MAX( CASE WHEN RN = 2 THEN Product ELSE NULL END ) AS Product2,
---- and so on
SUM( CASE WHEN RN = 14 THEN Amount ELSE NULL END ) AS Amount14,
SUM( price * Amount ) AS [Net price]
FROM (
SELECT ROW_NUMBER() OVER ( PARTITION BY Debitor, Debitor ORDER BY Period ) AS RN, *
FROM #TempVF
) AS RI
GROUP BY Period, Debitor
【问题讨论】:
-
您使用的是哪个 dbms?
-
Microsoft SQL Server 2014
标签: sql sql-server sql-server-2014