sql server-pivot : group by mit dynamischen Spalten
Ich habe eine PivotTabelle, die auf eine Tabelle, die Erzeugung dynamischer Spalten :
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);
Es gibt das folgende Ergebnis zurück :
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 | | | |
Aber ich muss die Gruppe durch die ersten 3 Spalten zu bekommen, die folgenden :
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 | | | |
Also muss ich group by time, country, disease
, aber als meine Spalten aus der pivot sind Dynamik, ich kann nicht verwalten, um eine Lösung zu finden...
Hier ist ein SQL fiddle
Du musst angemeldet sein, um einen Kommentar abzugeben.
Beispiel Fiddle
max(value)
stattconvert
+sum(value)
max
. Der eigentliche trick ist das entfernenpgroup1
,pgroup2
,pgroup3
aus der from-Klausel.Sum
ist nur notwendig, wenn Sie mehrere Zeilen mit dem gleichentime, country, disease, variable