Usuário com melhor resposta
Select numa tabela para apresentar dados em colunas

Pergunta
-
tenho uma tabela com a seguinte estrutura:
CODPROD MES ANO QTD
KINCFI4GB 1 2014 20.00000
KINCFI4GB 2 2014 50.00000
KINCFI4GB 3 2013 200.00000
KINCFI4GB 4 2013 105.00000
KINCFI4GB 5 2014 16.00000
KINCFI4GB 6 2014 27.00000
KINCFI4GB 7 2014 10.00000
KINCOOIKHXFAN 1 2011 6.00000
KINCOOIKHXFAN 2 2011 4.00000
KINCOOIKHXFAN 3 2010 24.00000PRECISO DE UM SQL QUE EU POSSA MOSTRAR, para cada produto :
CODPRO QTD MES1 QTD MES2 QTD MES3
KINCFI4GB 20.00000 50.00000 200.00000
Agradeço a ajuda
Respostas
-
Deleted
- Marcado como Resposta Newton Costa-BA quinta-feira, 3 de julho de 2014 20:14
-
pEDRO,
Obrigado pela resposta.
Na verdade quero apresentar as quantidades para até 03 meses de um determinado ano, cujo ano e mês incial serão informado via parâmetro.
Consegui selecionar por ano na minha queyr, porem com mês da erro.
;With Vendas AS
(
SELECT [ano], [it-codigo],
[1] as [QTD MES1], [2] as [QTD MES2], [3] AS [QTD MES3]FROM (SELECT [ano], [IT-CODIGO], MES, QTD
FROM [vendaking]) as S
pivot (max(QTD) for MES in ([1],[2], [3])) as P
)
SELECT
item.[desc-item]
,item.[codigo-refer]
,[saldo-dia].[it-codigo]
,[saldo-dia].[dt-saldo]
,[saldo-dia].[qt-saldo]
,[saldo-dia].[qt-tra]
,[vendas].[qtd mes1]
,[vendas].[qtd mes2]
,[vendas].[qtd mes3]FROM
[saldo-dia]
INNER JOIN item
ON [saldo-dia].[it-codigo] = item.[it-codigo]
INNER JOIN vendas
ON [saldo-dia].[it-codigo] = [vendas].[it-codigo]- Marcado como Resposta Newton Costa-BA sexta-feira, 4 de julho de 2014 15:15
Todas as Respostas
-
Deleted
- Marcado como Resposta Newton Costa-BA quinta-feira, 3 de julho de 2014 20:14
-
José Diz,
Perfeito, funciona corretamente.
Na verdade os valores são mês as mês dentro do mesmo ano.
Caso mude de ano, a seleção será feita pela mês/ano.
vou tentar incluir no meu código pois é um relatório com diversas informações, estas colunas ( 3 meses) são apenas para o faturamento.
Grato
-
Newton, isso é uma aplicação típica do operador pivot.Mas no exemplo que postou os dados são de no mínimo cinco anos (2010 a 2014). Os dados de um mesmo mês para um mesmo produto devem ser somados, caso existam informações em mais de um ano? Por exemplo, se para o produto X houver dados de 1/2014 e 1/2013, é para somar os dois meses?
Eis sugestão inicial, que soma linhas de mesmo mês para mesmo produto.
-- código 1 SELECT CODPROD, [1] as [QTD MES1], [2] as [QTD MES2], ... [11] as [QTD MES11], [12] as [QTD MES12] from (SELECT CODPROD, MES, QTD from tabela) as S pivot (sum(QTD) for MES in ([1],[2],...,[11],[12])) as P;
Obrigado, funciona perfeitamente.
José Diz Belo Horizonte, MG - Brasil
-
Newton,
Você quer transformar os valores que estão sendo apresentados em linha no formato de coluna?
Veja este exemplo:
CODPROD MES ANO QTD KINCFI4GB 1 2014 20.00000 KINCFI4GB 2 2014 50.00000 KINCFI4GB 3 2013 200.00000 KINCFI4GB 4 2013 105.00000 KINCFI4GB 5 2014 16.00000 KINCFI4GB 6 2014 27.00000 KINCFI4GB 7 2014 10.00000 KINCOOIKHXFAN 1 2011 6.00000 KINCOOIKHXFAN 2 2011 4.00000 KINCOOIKHXFAN 3 2010 24.00000 Create Table Valores (CodProd Varchar(20), Mes TinyInt, Ano SmallInt, QTD Float) Insert Into Valores Values('KINCFI4GB',1,2014,20.00000), ('KINCFI4GB',2,2014,50.00000), ('KINCFI4GB',3,2013,200.00000), ('KINCFI4GB',4,2013,105.00000), ('KINCFI4GB',5,2014,16.00000), ('KINCFI4GB',6,2014,27.00000), ('KINCFI4GB',7,2014,10.00000), ('KINCOOIKHXFAN',1,2011,6.00000), ('KINCOOIKHXFAN',2,2011,4.00000), ('KINCOOIKHXFAN',3,2010,24.00000) Select * from Valores Select CodProd, [1],[2],[3],[4],[5],[6] from Valores Pivot (sum(qtd) for mes in ([1],[2],[3],[4],[5],[6])) p
Pedro Antonio Galvão Junior [MVP | Microsoft Evangelist | Microsoft Partner | Engenheiro de Softwares | Especialista em Banco de Dados | SorBR.Net | Professor Universitário | MSIT.com]
-
pEDRO,
Obrigado pela resposta.
Na verdade quero apresentar as quantidades para até 03 meses de um determinado ano, cujo ano e mês incial serão informado via parâmetro.
Consegui selecionar por ano na minha queyr, porem com mês da erro.
;With Vendas AS
(
SELECT [ano], [it-codigo],
[1] as [QTD MES1], [2] as [QTD MES2], [3] AS [QTD MES3]FROM (SELECT [ano], [IT-CODIGO], MES, QTD
FROM [vendaking]) as S
pivot (max(QTD) for MES in ([1],[2], [3])) as P
)
SELECT
item.[desc-item]
,item.[codigo-refer]
,[saldo-dia].[it-codigo]
,[saldo-dia].[dt-saldo]
,[saldo-dia].[qt-saldo]
,[saldo-dia].[qt-tra]
,[vendas].[qtd mes1]
,[vendas].[qtd mes2]
,[vendas].[qtd mes3]FROM
[saldo-dia]
INNER JOIN item
ON [saldo-dia].[it-codigo] = item.[it-codigo]
INNER JOIN vendas
ON [saldo-dia].[it-codigo] = [vendas].[it-codigo]- Marcado como Resposta Newton Costa-BA sexta-feira, 4 de julho de 2014 15:15