SQL Query - Entlang der Linien einer Pivot-Tabelle
-
05-09-2019 - |
Frage
Ich habe ein Modell aus einer SQL-Abfrage, die eine echte SQL-Abfrage darstellen.
Create table #tmp
(
Atype varchar(10),
Btype varchar(10)
)
insert into #tmp values ('a','x')
insert into #tmp values ('b','x')
insert into #tmp values ('a','y')
insert into #tmp values ('a','y')
insert into #tmp values ('b','z')
insert into #tmp values ('b','y')
select atype, btype,count(*) as count
from #tmp
group by atype, btype
order by atype
drop table #tmp
Das gibt mir das Ergebnis:
atype btype count
-----------------
a x 1
a y 2
b x 1
b y 1
b z 1
Was ich suche danach in der Lage sein, einen Bericht zu erstellen, die im Grunde wie folgt aussieht:
atype|x| y| z
-------------
a |1| 2| 0
b |1| 1| 1
Ich bin sicher, dass Sie dies tun können, verrückt T-SQL-Code kommen, aber ich bin struggeling es richtig zu machen.
EDIT:
Ich bin damit einverstanden, dass Sie den TSQL PIVOT Befehl verwenden können, aber was passiert, wenn Btype ist variabel. Was bedeutet, dass ich weiß nicht, wie viele Arten es wird?
Lösung
SELECT
atype,
SUM(CASE btype WHEN 'x' THEN 1 ELSE 0 END) AS x,
SUM(CASE btype WHEN 'y' THEN 1 ELSE 0 END) AS y,
SUM(CASE btype WHEN 'z' THEN 1 ELSE 0 END) AS z
FROM
#tmp
group by
atype
order by
atype
Andere Tipps
@Tomalak
Antwort ist schön, aber es gibt nichts verrückt danach, einfach nur alten SQL
.
Hier ist das wirklich verrückt T-SQL
Code Sie gefragt, falls Sie interessiert waren:
SELECT atype, [x], [y], [z]
FROM (
SELECT atype, btype
FROM #tmp
) t
PIVOT
(
COUNT(btype)
FOR btype IN ([x], [y], [z])
) AS PivotTable
Es scheint, dass eine direkte Pivot nur von SQL Server 2005 unterstützt wird, wie gezeigt, hier
Hier ist, wie kann es mit Oracle getan werden - http: / /www.adp-gmbh.ch/ora/sql/examples/pivot.html
Sehen Sie dies für eine gespeicherte Prozedur für MySQL, die eine Kreuztabellierung erzeugt: