2016-03-29 17 views
0

Hier ist die Abfrage:So gruppieren Felder innerhalb einer Spalte nach bestimmten Kriterien

SELECT  REF.TOS        AS [TOS Value] 
     ,RSA_BIRMINGHAM_1941$.Percentage  AS [Birmingham] 
     ,RSA_CARDIFFREGUS_2911$.Percentage  AS [Cardiff Regus] 
     ,RSA_CASTLEMEAD_1941$.Percentage  AS [Castlemead] 
     ,RSA_CHELMSFORD_1941$.Percentage  AS [Chelmsford] 



FROM  
     (SELECT TOS FROM RSA_BIRMINGHAM_1941$  UNION 
     SELECT TOS FROM RSA_CARDIFFREGUS_2911$  UNION 
     SELECT TOS FROM RSA_CASTLEMEAD_1941$  UNION 
     SELECT TOS FROM RSA_CHELMSFORD_1941$  
     ) AS REF 

FULL OUTER JOIN RSA_BIRMINGHAM_1941$  ON REF.TOS = 
RSA_BIRMINGHAM_1941$.TOS 
FULL OUTER JOIN RSA_CARDIFFREGUS_2911$  ON REF.TOS = 
RSA_CARDIFFREGUS_2911$.TOS 
FULL OUTER JOIN RSA_CASTLEMEAD_1941$  ON REF.TOS = 
RSA_CASTLEMEAD_1941$.TOS 
FULL OUTER JOIN RSA_CHELMSFORD_1941$  ON REF.TOS = 
RSA_CHELMSFORD_1941$.TOS 

und hier ist die Ausgabe:

TOS Value  Birmingham CardiffRegus Castlemead Chelmsford 
af11 (DSCP 10) 15.22%   4.63%   0.00%  6.16% 
af12 (DSCP 12) 0.12%   NULL   NULL  NULL 
af21 (DSCP 18) 0.05%   0.05%   0.00%  0.02% 
af31 (DSCP 26) 8.86%   13.85%   0.01%  5.59% 
af32 (DSCP 28) NULL   NULL   NULL  0.02% 
af33 (DSCP 30) 11.49%   15.44%   NULL  7.33% 
af41 (DSCP 34) 0.70%   0.03%   0.01%  0.05% 
cs3 (DSCP 24) 0.06%   0.11%   0.01%  0.04% 
cs4 (DSCP 32) 0.15%   0.20%   NULL  0.10% 
cs6 (DSCP 48) NULL   0.23%   0.00%  NULL 
defau(DSCP 0) 61.37%   61.74%   99.48%  79.78% 
ef (DSCP 46) 1.91%   3.72%   0.49%  0.91% 

ich bestimmte Werte des TOS-Wertes zum Gruppieren Spalte unter einer "Eltern" -Gruppe, ohne die anderen Spalten zu beeinflussen, da sie direkt mit der TOS-Wertespalte zusammenhängen.

siehe Bild unten für eine Idee von dem, was ich erreichen müssen:

enter image description here

+0

Bilder vermeiden. Nicht jeder kann sie sehen. – mxix

+0

Sollte es aus der anderen Richtung der sich selbst verbinden jede RSA_SITE Tabelle zusammen, um die Spalten wie erforderlich und UNION ALL jeder dieser Abfragen – tawman

+0

Ich verstehe nicht die Logik, wie Sie erwarten, um das gewünschte Ergebnis zu erreichen. –

Antwort

1

Sie könnten ein tun langatmig Selbstverknüpfung, aber da diese SQL Server ist, können wir die Vorteile der Pivot-Tabelle übernehmen Abfrage.

SQL Fiddle Example here

SELECT * FROM ( SELECT 'Birmingham' AS [SITE], REF.TOS, Percentage FROM ( SELECT TOS FROM RSA_BIRMINGHAM_1941$ UNION SELECT TOS FROM RSA_CARDIFFREGUS_2911$ UNION SELECT TOS FROM RSA_CASTLEMEAD_1941$ UNION SELECT TOS FROM RSA_CHELMSFORD_1941$ ) AS REF LEFT OUTER JOIN RSA_BIRMINGHAM_1941$ RSA ON RSA.TOS = REF.TOS ) BIRM PIVOT (SUM(Percentage) FOR TOS in ( [ef (DSCP 46)], [af31 (DSCP 26)], [af32 (DSCP 28)], [af33 (DSCP 30)], [cs3 (DSCP 24)], [cs4 (DSCP 32)], [cs6 (DSCP 48)], [af41 (DSCP 34)], [af42 (DSCP 36)], [af43 (DSCP 38)], [af21 (DSCP 18)], [af22 (DSCP 20)], [af23 (DSCP 22)], [af11 (DSCP 10)], [af12 (DSCP 12)], [af13 (DSCP 14)], [defau(DSCP 0)]) ) PIV UNION ALL SELECT * FROM ( SELECT 'Cardiff Regus' AS [SITE], REF.TOS, Percentage FROM ( SELECT TOS FROM RSA_BIRMINGHAM_1941$ UNION SELECT TOS FROM RSA_CARDIFFREGUS_2911$ UNION SELECT TOS FROM RSA_CASTLEMEAD_1941$ UNION SELECT TOS FROM RSA_CHELMSFORD_1941$ ) AS REF LEFT OUTER JOIN RSA_CARDIFFREGUS_2911$ RSA ON RSA.TOS = REF.TOS ) CARD PIVOT (SUM(Percentage) FOR TOS in ( [ef (DSCP 46)], [af31 (DSCP 26)], [af32 (DSCP 28)], [af33 (DSCP 30)], [cs3 (DSCP 24)], [cs4 (DSCP 32)], [cs6 (DSCP 48)], [af41 (DSCP 34)], [af42 (DSCP 36)], [af43 (DSCP 38)], [af21 (DSCP 18)], [af22 (DSCP 20)], [af23 (DSCP 22)], [af11 (DSCP 10)], [af12 (DSCP 12)], [af13 (DSCP 14)], [defau(DSCP 0)]) ) PIV UNION ALL SELECT * FROM ( SELECT 'Castlemead' AS [SITE], REF.TOS, Percentage FROM ( SELECT TOS FROM RSA_BIRMINGHAM_1941$ UNION SELECT TOS FROM RSA_CARDIFFREGUS_2911$ UNION SELECT TOS FROM RSA_CASTLEMEAD_1941$ UNION SELECT TOS FROM RSA_CHELMSFORD_1941$ ) AS REF LEFT OUTER JOIN RSA_CASTLEMEAD_1941$ RSA ON RSA.TOS = REF.TOS ) CASTLE PIVOT (SUM(Percentage) FOR TOS in ( [ef (DSCP 46)], [af31 (DSCP 26)], [af32 (DSCP 28)], [af33 (DSCP 30)], [cs3 (DSCP 24)], [cs4 (DSCP 32)], [cs6 (DSCP 48)], [af41 (DSCP 34)], [af42 (DSCP 36)], [af43 (DSCP 38)], [af21 (DSCP 18)], [af22 (DSCP 20)], [af23 (DSCP 22)], [af11 (DSCP 10)], [af12 (DSCP 12)], [af13 (DSCP 14)], [defau(DSCP 0)]) ) PIV UNION ALL SELECT * FROM ( SELECT 'Chelmsford' AS [SITE], REF.TOS, Percentage FROM ( SELECT TOS FROM RSA_BIRMINGHAM_1941$ UNION SELECT TOS FROM RSA_CARDIFFREGUS_2911$ UNION SELECT TOS FROM RSA_CASTLEMEAD_1941$ UNION SELECT TOS FROM RSA_CHELMSFORD_1941$ ) AS REF LEFT OUTER JOIN RSA_CHELMSFORD_1941$ RSA ON RSA.TOS = REF.TOS ) CHEM PIVOT (SUM(Percentage) FOR TOS in ( [ef (DSCP 46)], [af31 (DSCP 26)], [af32 (DSCP 28)], [af33 (DSCP 30)], [cs3 (DSCP 24)], [cs4 (DSCP 32)], [cs6 (DSCP 48)], [af41 (DSCP 34)], [af42 (DSCP 36)], [af43 (DSCP 38)], [af21 (DSCP 18)], [af22 (DSCP 20)], [af23 (DSCP 22)], [af11 (DSCP 10)], [af12 (DSCP 12)], [af13 (DSCP 14)], [defau(DSCP 0)]) ) PIV;

+0

Das hat funktioniert, danke für diesen Kumpel! –

Verwandte Themen