2013-07-26 27 views
6
Zählen

Ich habe folgende Tabelle:Konvertieren Zeilen in Spalten nach

Type1 Type2 
A  T1 
A  T2 
A  T1 
A  T1 
A  T2 
A  T3 
B  T3 
B  T2 
B  T3 
B  T3 

I ausgegeben werden soll, wie:

Type1 T1 T2 T3 
A  3 2 1 
B  0 1 3 

ich mit ROW_NUMBER versucht() OVER (ORDER BY) und CASE Statements aber couldn‘ t bekommen gewünschte Ausgabe. Bitte Hilfe. Danke im Voraus.

Antwort

7

Try PIVOT verwenden -

Abfrage 1:

DECLARE @temp TABLE (Type1 CHAR(1), Type2 CHAR(2)) 

INSERT INTO @temp (Type1, Type2) 
VALUES 
    ('A', 'T1'),('A', 'T2'), 
    ('A', 'T1'),('A', 'T1'), 
    ('A', 'T2'),('A', 'T3'), 
    ('B', 'T3'),('B', 'T2'), 
    ('B', 'T3'),('B', 'T3') 

SELECT * 
FROM @temp 
PIVOT 
(
    COUNT(Type2) FOR Type2 IN (T1, T2, T3) 
) p 

Abfrage 2:

SELECT 
     Type1 
    , T1 = COUNT(CASE WHEN Type2 = 'T1' THEN 1 END) 
    , T2 = COUNT(CASE WHEN Type2 = 'T2' THEN 1 END) 
    , T3 = COUNT(CASE WHEN Type2 = 'T3' THEN 1 END) 
FROM @temp 
GROUP BY Type1 

Ausgang:

Type1 T1   T2   T3 
----- ----------- ----------- ----------- 
A  3   2   1 
B  0   1   3 
+0

+1 SqlFiddle und lernte etwas über PIVOT: http://sqlfiddle.com/#!3/d41d8/17784 – mike27015

+0

+1 für Sie und mein Wissen über 'pivot': D – mirkobrankovic

+0

Dank @mirkobrankovic :) – Devart

5
SELECT Type1, 
     SUM(CASE WHEN Type2='T1' THEN 1 ELSE 0 END) AS T1, 
     SUM(CASE WHEN Type2='T2' THEN 1 ELSE 0 END) AS T2, 
     SUM(CASE WHEN Type2='T3' THEN 1 ELSE 0 END) AS T3 
FROM your_table 
GROUP BY Type1 
+0

+1 Fiddle arbeiten: http://sqlfiddle.com/#!3/9f29d/8/0 –

+0

Bitte beachten Sie, dass 'END AS T1' die ungültige Syntax . – Devart

+0

@Devart thx, bearbeitet. +1 für mein Wissen von PIVOT: D – mirkobrankovic

2

Dies wird

SELECT 
(SELECT count(*) FROM table1 WHERE type2 = 'T1' AND type1 = mTable1.type1) AS T1, 
(SELECT count(*) FROM table1 WHERE type2 = 'T2' AND type1 = mTable1.type1) AS T2, 
(SELECT count(*) FROM table1 WHERE type2 = 'T3' AND type1 = mTable1.type1) AS T3 
FROM table1 mTable1 GROUP BY type1 
Verwandte Themen