0
Я сделал стержень на столе, создавая динамические столбцы:SQL шарнирных серверов: Группировка с динамическими столбцами
DECLARE @cols AS NVARCHAR(MAX);
DECLARE @query AS NVARCHAR(MAX);
select @cols = STUFF((SELECT distinct ',' +
QUOTENAME(Replace(variable,char(CAST(0x0016 as int)),'')) val
FROM TABLEDATA
ORDER BY val asc
FOR XML PATH(''), TYPE
).value('.', 'NVARCHAR(MAX)')
, 1, 1, '');
SELECT @query =
'SELECT
time,
country,
disease,
' + @cols + '
FROM
TABLEDATA
PIVOT
(
MAX(value)
FOR variable IN(' + @cols + ')' +
') AS p; ';
execute(@query);
Он возвращает следующий результат:
time | country | disease | indicateur1 | indicateur2 | ... | indicateur14 | ... | indicateurn
-----------------------------------------------------------------------------------------
2001 | FRANCE | MAL | 0.003 | | | | |
2002 | FRANCE | AID | | 0.45 | | | |
1997 | ITALY | HIV | 0.307 | | | | |
1999 | ROMANIA | MAL | 1.044 | | | | |
2003 | ROMANIA | AID | | | | 0.77 | |
2003 | ROMANIA | AID | 0.872 | | | | |
2004 | ROMANIA | HIV | | 0.921 | | | |
2002 | IRELAND | MAL | | 0.008 | | | |
Но мне нужно сгруппировать на первых 3-х столбцов, чтобы получить следующее:
time | country | disease | indicateur1 | indicateur2 | ... | indicateur14 | ... | indicateurn
-----------------------------------------------------------------------------------------
2001 | FRANCE | MAL | 0.003 | | | | |
2002 | FRANCE | AID | | 0.45 | | | |
1997 | ITALY | HIV | 0.307 | | | | |
1999 | ROMANIA | MAL | 1.044 | | | | |
2003 | ROMANIA | AID | 0.872 | | | 0.77 | |
2004 | ROMANIA | HIV | | 0.921 | | | |
2002 | IRELAND | MAL | | 0.008 | | | |
так что мне нужно group by time, country, disease
, но как мои столбцы из стержнем являются динамика, я не удается найти решение ...
Вот SQL fiddle
Хороший трюк, который я должен был думать о том! Я сохранил 'max (value)' вместо 'convert' +' sum (value) ' – Yann39
Я неправильно направил вас, он по-прежнему работает с' max'. Фактический трюк заключается в удалении 'pgroup1',' pgroup2', 'pgroup3' из предложения from. «Сумма» необходима только в том случае, если у вас несколько строк с одинаковым «временем, страной, болезнью, переменной» – Laurence