J'ai une maquette d'une requête sql qui représentera une véritable requête sql.Requête SQL - Le long des lignes d'un tableau croisé dynamique
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
Cela me donnera le résultat de:
atype btype count
-----------------
a x 1
a y 2
b x 1
b y 1
b z 1
Qu'est-ce que je cherche après cela est de pouvoir créer un rapport qui ressemble fondamentalement à:
atype|x| y| z
-------------
a |1| 2| 0
b |1| 1| 1
I Je suis sûr que vous pouvez le faire en utilisant le code t-sql fou, mais je me bats pour le faire correctement.
EDIT:
Je suis d'accord que vous pouvez utiliser la commande PIVOT TSQL mais ce qui se passe quand BTYPE est variable. Ce qui signifie que je ne sais pas combien de types il y aura?
+1 pour le code agréable et compact. Note à moi: lors de l'utilisation des opérateurs de comparaison, mettre WHEN immédiatement après le cas, par exemple: ColA \t \t \t \t \t, SUM (CAS QUAND Jours <= 0 ALORS 1 ELSE 0 END) AS [0] , SUM (CAS WHEN Days = 1 THEN 1 ELSE 0 END) AS [1] – mg1075
@ mg1075 Les deux formes d'écriture d'un 'WHEN' sont différentes l'une de l'autre: Le' CASE x WHEN 1 then foo WHEN 2 BAR END' ressemble à un 'switch 'déclaration, il n'accepte pas les expressions. Alors que 'CASE WHEN x = 1 ALORS foo WHEN x = 2 ALORS barre END' ressemble à' if-else if' et attend des expressions. Utilisez le formulaire approprié pour chaque cas. – Tomalak