Usuário com melhor resposta
Duvida de script com inversão de linhas em colunas

Pergunta
-
Boa Tarde pessoal, estou fazendo um nó na minha cabeça tentando fazer um PIVOT da seguinte situação:
*Tenho um script que faz o seguinte:
USE
Garagem
SELECT
s.idlinha,
t.descricao,
count(c.tipo) AS Total
FROM
cartao c,
Servico s,
MeiaViagem mv,
Tipos t
WHERE
((c.idmv=mv.id)and mv.idsv=s.id)and (c.tipo=t.tipo) and
c.datahora>='01/01/2012 00:01' and
c.datahora<='31/01/2012 23:59'
GROUP BY
t.descricao,
s.idlinha
ORDER BY
s.idlinha,
t.descricao
Resultado
idlinha | descricao | Total
01 | Acompa. | 115
01 | VT | 354
01 | Comum | 815
02B | Acompa. | 89
02B | VT | 2210
02B | Comum | 3510
Gostaria que ficasse:
idlinha | Acompa. | Comum | VT
01 | 115 | 815 | 354
02B | 89 | 3510 | 2210
Ou seja, a 'descricao' que é o tipo de cartão viraria coluna, mas a coluna 'idlinha' ficaria como está e a coluna 'total' se encaixaria com a coluna dos tipos de cartão.
Respostas
-
Segue mais um exemplo usando pivot table para SQL 2005 ou superior
USE Garagem ;with cte_dados as ( SELECT s.idlinha, t.descricao, count(c.tipo) AS Total FROM cartao c, Servico s, MeiaViagem mv, Tipos t WHERE ((c.idmv=mv.id)and mv.idsv=s.id)and (c.tipo=t.tipo) and c.datahora>='01/01/2012 00:01' and c.datahora<='31/01/2012 23:59' GROUP BY t.descricao, s.idlinha) SELECT idlinha, [Acompa.], [VT], [Comum] FROM (SELECT idlinha, descricao, Total FROM cte_dados) AS SourceTable PIVOT ( sum(Total) FOR descricao IN ([Acompa.], [VT], [Comum]) ) AS PivotTable;
Att.
Marcelo Fernandes
MCP, MCDBA, MCSA, MCTS.
Se útil, classifique!!!
Me siga no twitter: @marcelodba- Editado Marcelo Fernandes da SilvaMVP, Moderator segunda-feira, 13 de fevereiro de 2012 14:53
- Marcado como Resposta Jonas Tomazelli segunda-feira, 13 de fevereiro de 2012 17:52
Todas as Respostas
-
-
Boa Tarde Jonas assim dá certo, porém você terá que passar as descrições fixas: DECLARE @TABELA TABLE (IDLINHA CHAR(03),DESCRICAO VARCHAR(10),TOTAL INT) INSERT INTO @TABELA VALUES ('01','Acompa.',115) INSERT INTO @TABELA VALUES ('01','VT',354) INSERT INTO @TABELA VALUES ('01','Comum',815) INSERT INTO @TABELA VALUES ('02B','Acompa.',89) INSERT INTO @TABELA VALUES ('02B','VT',2210) INSERT INTO @TABELA VALUES ('02B','Comum',3510) SELECT IDLINHA, sum(CASE WHEN DESCRICAO = 'Acompa.' THEN TOTAL ELSE 0 END) AS 'Acompa.', sum(CASE WHEN DESCRICAO = 'Comum' THEN TOTAL ELSE 0 END) AS 'Comum', sum(CASE WHEN DESCRICAO = 'VT' THEN TOTAL ELSE 0 END) AS 'VT' FROM @TABELA group by IDLINHA
Paulo Katsuo Katayama Junior
-
Segue mais um exemplo usando pivot table para SQL 2005 ou superior
USE Garagem ;with cte_dados as ( SELECT s.idlinha, t.descricao, count(c.tipo) AS Total FROM cartao c, Servico s, MeiaViagem mv, Tipos t WHERE ((c.idmv=mv.id)and mv.idsv=s.id)and (c.tipo=t.tipo) and c.datahora>='01/01/2012 00:01' and c.datahora<='31/01/2012 23:59' GROUP BY t.descricao, s.idlinha) SELECT idlinha, [Acompa.], [VT], [Comum] FROM (SELECT idlinha, descricao, Total FROM cte_dados) AS SourceTable PIVOT ( sum(Total) FOR descricao IN ([Acompa.], [VT], [Comum]) ) AS PivotTable;
Att.
Marcelo Fernandes
MCP, MCDBA, MCSA, MCTS.
Se útil, classifique!!!
Me siga no twitter: @marcelodba- Editado Marcelo Fernandes da SilvaMVP, Moderator segunda-feira, 13 de fevereiro de 2012 14:53
- Marcado como Resposta Jonas Tomazelli segunda-feira, 13 de fevereiro de 2012 17:52
-