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?

War es hilfreich?

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:

http://www.futhark.ch/mysql/106.html

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top