Pergunta

Eu tenho um up simulada de uma consulta sql que irá representar uma consulta SQL real.

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

Isso vai me dar o resultado de:

atype btype count
-----------------
a     x     1
a     y     2
b     x     1
b     y     1
b     z     1

O que eu estou procurando após este é para ser capaz de criar um relatório que basicamente se parece com:

atype|x| y| z
-------------
a    |1| 2| 0
b    |1| 1| 1

Eu tenho certeza que você pode fazer isso usando vêm código louco T-SQL, mas estou debatendo para ter direito.

EDIT:

Eu concordo que você pode usar o comando TSQL PIVOT, mas o que acontece quando Btype é variável. O que significa que eu não sei quantos tipos haverá?

Foi útil?

Solução

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

Outras dicas

A resposta de @Tomalak é bom, mas não há nada de louco por ela, simplesmente SQL de idade.

Aqui está o código T-SQL realmente louco você pediu, no caso de você estavam interessados:

SELECT  atype, [x], [y], [z]
FROM    (
        SELECT  atype, btype
        FROM    #tmp
        ) t
PIVOT
        (
        COUNT(btype)
        FOR btype IN ([x], [y], [z])
        ) AS PivotTable

Parece que um pivô direta só é suportada pelo SQL Server 2005, como mostrado aqui

Aqui está como isso pode ser feito com a Oracle - http: / /www.adp-gmbh.ch/ora/sql/examples/pivot.html

Veja este para um procedimento armazenado para MySQL que produz uma tabulação cruzada:

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

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top