У меня есть следующий результат, когда я запрашиваю несколько таблиц / представлений и помещаю результат в #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 |
Их много больше столбцов, но это основные, и в отличие от этого примера не каждый атрибут (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