none
Consulta Referência Cruzada em SQL SERVER RRS feed

  • Pergunta

  • Prezados,

    Gotaria de saber se alguém pudo me ajudar a fazer uma consulta no SQL Server Express de referência cruzada eu sei fazer a mesma no Access porém no Sql Server copio o código mas não funcionan já pesquisei e não consigo ver onde estou errando se alguém puder me ajudar desde já agradeço

    Esse exemplo é como faço no Access:

    TRANSFORM Sum(tblDigProd.DigVlrTarefa) AS SomaDeDigVlrTarefa
    SELECT tblDigProd.DigProdPlacaSup
    FROM tblDigProd
    GROUP BY tblDigProd.DigProdPlacaSup
    PIVOT tblDigProd.DigProdCodTar;

    Obrigado,
    Vinicios Moura
    terça-feira, 27 de outubro de 2009 12:09

Respostas

  • Meu camarada muito obrigado pela ajuda eu conseguir fazer a consulta e está funcionando perfeitamente veja só como ficou

    SELECT     DigProdDataEnt, FunMatFunc AS Mat, FunNome AS Funcionario, [DigProdQdtTar] * (CASE WHEN [Corte (A3)] IS NOT NULL THEN [Corte (A3)] ELSE 0 END) AS CORTE,
                          [DigProdQdtTar] * (CASE WHEN [Nada Apurado (NA)] IS NOT NULL THEN [Nada Apurado (NA)] ELSE 0 END) AS NA,
                          (([DigProdQdtTar] * CASE WHEN [Normalização Básica] IS NOT NULL THEN [Normalização Básica] ELSE 0 END)
                          + ([DigProdQdtTar] * CASE WHEN [INSPEÇÃO DEFEITO NORMALIZ. S\ MATERIAL] IS NOT NULL THEN [INSPEÇÃO DEFEITO NORMALIZ. S\ MATERIAL] ELSE 0 END)
                          + ([DigProdQdtTar] * CASE WHEN [INSPEÇÃO TOI NORMALIZ. S\ MATERIAL] IS NOT NULL THEN [INSPEÇÃO TOI NORMALIZ. S\ MATERIAL] ELSE 0 END))
                          AS tESTE
    FROM         tblOrdResult RIGHT JOIN
                          (tblFuncionario RIGHT JOIN
                          qryUniPontosM_A ON tblFuncionario.FunNome = qryUniPontosM_A.FuncMA) ON
                          tblOrdResult.OrdResultado = qryUniPontosM_A.ResDescricao PIVOT (SUM([ResVlrPontos]) FOR OrdResultado IN ([Corte (A3)], [Nada Apurado (NA)],
                          [Normalização Básica], [INSPEÇÃO DEFEITO NORMALIZ. S\ MATERIAL], [INSPEÇÃO TOI NORMALIZ. S\ MATERIAL])) Pt

    Obrigado pelas dicas quando precisar e se eu puder te ajudadr estarei aqui é só chamar. Valeu!
    Vinicios Moura
    • Marcado como Resposta Vinicios Moura quarta-feira, 4 de novembro de 2009 16:16
    quarta-feira, 4 de novembro de 2009 14:56

Todas as Respostas

  • Vinicius,

    Você desejar transformar alguns linhas da sua tabela em colunas?

    Pedro Antonio Galvão Junior - MVP - Windows Server System - SQL Server/Coordenador de Projetos/DBA
    terça-feira, 27 de outubro de 2009 15:49
    Moderador
  • Isso mesmo ...
    Vinicios Moura
    terça-feira, 27 de outubro de 2009 18:22
  • Vinicius,

    Você esta utilizando SQL Server 2005?

    Se for, veja este exemplo:

    declare @pessoas as table (id int, nome varchar(30))
    declare @telefones as table (idpessoa int, tel varchar(9))
    insert into @pessoas values(1,'Marcelo')
    insert into @pessoas values(2,'Camila')
    insert into @pessoas values(3,'Tricolor')

    insert into @telefones values(1,'123-1234')
    insert into @telefones values(1,'222-2222')
    insert into @telefones values(1,'333-3333')
    insert into @telefones values(2,'123-1234')
    insert into @telefones values(2,'4444-4234')
    insert into @telefones values(2,'1406')
    insert into @telefones values(3,'125487-12')
    ;with cte
    as
    (
    select id,nome,tel, row_number() over (partition by id,nome order by id,nome ) as contador from @pessoas a inner join @telefones b ON a.id = b.idpessoa
    )
    select * from
    (select id,nome,tel,contador from cte ) d
        pivot (max(tel) for contador in ([1],[2],[3])) as pvt



    Create table #Exemplo (codigo int, nome varchar(10))

    insert into #Exemplo (codigo, nome) Values (1,'jose')

    insert into #Exemplo (codigo, nome) Values (2,'mario')

    insert into #Exemplo (codigo, nome) Values (1,'jose')

    insert into #Exemplo (codigo, nome) Values (2,'mario')

    insert into #Exemplo (codigo, nome) Values (3,'celso')

    insert into #Exemplo (codigo, nome) Values (4,'andre')

    Select [jose],[mario],[celso],[andre] from #exemplo
    Pivot (count(codigo) for nome in ([jose],[mario],[celso],[andre])) p


    Create table #Exemplo (codigo int, nome varchar(10), idUsuario int)

     

    insert into #Exemplo (codigo, nome, idUsuario) Values (1,'jose', 12)

    insert into #Exemplo (codigo, nome, idUsuario) Values (2,'mario', 7)

    insert into #Exemplo (codigo, nome, idUsuario) Values (1,'jose', 14)

    insert into #Exemplo (codigo, nome, idUsuario) Values (2,'mario', 12)

    insert into #Exemplo (codigo, nome, idUsuario) Values (3,'celso', 7)

    insert into #Exemplo (codigo, nome, idUsuario) Values (4,'andre', 14)

     

    Select [jose],[mario],[celso],[andre] from #exemplo

    Pivot (count(codigo) for nome in ([jose],[mario],[celso],[andre])) p

    -- CTE com Pivot --
    with consulta as (select codigo, nome from #Exemplo)

    Select [jose],[mario],[celso],[andre] from Consulta

    Pivot (count(codigo) for nome in ([jose],[mario],[celso],[andre])) p


    -- Trabalhando com funções de agregação no Pivot
    CREATE TABLE Sales (EmpId INT, Yr INT, Sales MONEY)

    INSERT Sales VALUES(1, 2005, 12000)

    INSERT Sales VALUES(1, 2006, 18000)

    INSERT Sales VALUES(1, 2007, 25000)

    INSERT Sales VALUES(2, 2005, 15000)

    INSERT Sales VALUES(2, 2006, 6000)

    INSERT Sales VALUES(3, 2006, 20000)

    INSERT Sales VALUES(3, 2007, 24000)

     

    SELECT [2005], [2006], [2007]

    FROM (SELECT Yr, Sales FROM Sales) AS s

    PIVOT (SUM(Sales) FOR Yr IN ([2005], [2006], [2007])) AS p


    SELECT [2005], [2006], [2007], [2005] + [2006] + [2007] As Total

    FROM (SELECT Yr, Sales FROM Sales) AS s

    PIVOT (SUM(Sales) FOR Yr IN ([2005], [2006], [2007])) AS p

     


    Pedro Antonio Galvão Junior - MVP - Windows Server System - SQL Server/Coordenador de Projetos/DBA
    quarta-feira, 28 de outubro de 2009 18:24
    Moderador
  • Pow! Meu camarada,

    Primeiramente me perdoe por não ter lhe agradecido antes é que tava com alguns problemas aqui e não pude faze-lo, bom obrigado pela dica eu vou tentar fazer aqui e te respondo se consegui

    Muito obrigado mesmo.

    Abraços...
    Vinicios Moura
    sexta-feira, 30 de outubro de 2009 12:03
  • Caramba cara, estou me sentido um monstro "rsrs", não estou consiguindo fazer essa consulta, uma consulta tão simples pra mim no Access e no SQL Server não cosigo da erro toda vez de "Erro de Sintaxe póximo..."

    TRANSFORM Sum(tblDigProd.DigVlrTarefa) AS SomaDeDigVlrTarefa
    SELECT tblDigProd.DigProdPlacaSup
    FROM tblDigProd
    GROUP BY tblDigProd.DigProdPlacaSup
    PIVOT tblDigProd.DigProdCodTar;

    Que me dá isso:

    SUP  -  T1  -  T2  - T3  - T4 .....
    xxx  -  12  -  33  - 33  -  44 ...
    vvv .....

    Eu depois do seu exemplo estou colocando assim:

    SELECT DigProdPlacaSup
    FROM tblDigProd
    PIVOT SUM(DigVlrTarefa) as Taar


    Vinicios Moura
    sexta-feira, 30 de outubro de 2009 15:59
  • Vinicius,

    A lógica utilizada no Access pode ser a mesma no SQL Server, mas a forma que você esta tentando implementar o comandos do Access não são as mesmas no SQL Server.

    Os exemplos que eu postei não ajudaram?
    Pedro Antonio Galvão Junior - MVP - Windows Server System - SQL Server/Coordenador de Projetos/DBA
    domingo, 1 de novembro de 2009 21:47
    Moderador
  • Junior,

    Os exemplos estão legais, mas acho que não estou conseguindo porque pelo que entendi do seus exemplos você fixa as colunas. Já no que estou tententado e uma tabela com as tarefas ai em cada tarefa abaixo vai ter o somatórios dessas tarefas executadas. Sei lá eu acho que não estou entendo bem.

    Obrigado


    Vinicios Moura
    terça-feira, 3 de novembro de 2009 14:39
  • Vinicios,

    Você não deseja utilizar colunas fixas?
    Pedro Antonio Galvão Junior - MVP - Windows Server System - SQL Server/Coordenador de Projetos/DBA
    terça-feira, 3 de novembro de 2009 15:41
    Moderador
  • Sim mas, atravez da tabela tarefas as ou seja cada registro será uma coluna entende..
    Vinicios Moura
    terça-feira, 3 de novembro de 2009 18:19
  • Junior,

    Me ajuda aqui se puder eu estive pesquisando e achei uma explicação legal só que esta dando problema de tipo


    SELECT     FunNome, [Corte (A3)] AS CORTE
    FROM         dbo.qryUniPontosM_A PIVOT (SUM(ResVlrPontos) FOR ResVlrPontos IN ([Corte (A3)])) p

    Tá dando erro  falando que "Erro ao converter o tipo de dados nvarchar em numeric. Valor incorreto "Corte (A3)" fornecido no operador PIVOT"
    Vinicios Moura
    terça-feira, 3 de novembro de 2009 18:25
  • Junior eu conseguir fazer o PIVOT só que ele não esta agrupando para somar os valores conseguir como fazer nesse linck

    http://www.devmedia.com.br/articles/viewcomp.asp?comp=5292


    E aqui esta como conseguir fazer só não agrupa mostra todos os dados


    SELECT     FunNome, [Corte (A3)] AS CORTE, [Nada Apurado (NA)] AS NA
    FROM         dbo.qryUniPontosM_A PIVOT (SUM(ResVlrPontos) FOR ResDescricao IN ([Corte (A3)], [Nada Apurado (NA)])) p

    Obrigado


    Vinicios Moura
    terça-feira, 3 de novembro de 2009 18:37
  • Moura,

    Será que o Group By não ajudaria?

    Se você fizer o Group by pela coluna FunNome:


    SELECT     FunNome,
                    [Corte (A3)] AS CORTE,
                    [Nada Apurado (NA)] AS NA
    FROM        dbo.qryUniPontosM_A PIVOT (SUM(ResVlrPontos) FOR ResDescricao IN ([Corte (A3)], [Nada Apurado (NA)])) p
    Group By FunNome

    Pedro Antonio Galvão Junior - MVP - Windows Server System - SQL Server/Coordenador de Projetos/DBA
    terça-feira, 3 de novembro de 2009 23:36
    Moderador
  • Junior,

    Eu tentei usar o Group By mas eu acho que o coloquei na linha errada rsss
    Coloquei assim rsss...

    SELECT     FunNome,
                    [Corte (A3)] AS CORTE,
                    [Nada Apurado (NA)] AS NA
    FROM        dbo.qryUniPontosM_A
    Group By FunNome
    PIVOT (SUM(ResVlrPontos) FOR ResDescricao IN ([Corte (A3)], [Nada Apurado (NA)])) p

    blz vou tentar também, mas me tira só uma curiosidade para que a letra "p" no final da sintaxe PIVOT tá só atribuindo um nome de coluna ??

    Obrigado
    Vinicios Moura
    quarta-feira, 4 de novembro de 2009 10:31
  • Vinicios,

    A letra "P" é um atributo dado para sentença correspondente ao Pivot.

    Faça primeiro o Pivot e depois o Group By.
    Pedro Antonio Galvão Junior - MVP - Windows Server System - SQL Server/Coordenador de Projetos/DBA
    quarta-feira, 4 de novembro de 2009 11:45
    Moderador
  • Então,

    Foi isso que eu fiz e deu certo primeiro eu fiz o PIVOT depois puxei a VIEW e fiz o GROUP BY e funcionou perfeitamente.
    Obrigado,

    Só que agora estou tendo dificuldades para fazer o PIVOT com duas TABELAS está dando erro rs


    Obrigado
    Vinicios Moura
    quarta-feira, 4 de novembro de 2009 11:56
  • Moura,

    Você quer fazer o Pivot e duas tables!!!!

    Esta utilizando Join entre estas tables?
    Pedro Antonio Galvão Junior - MVP - Windows Server System - SQL Server/Coordenador de Projetos/DBA
    quarta-feira, 4 de novembro de 2009 12:38
    Moderador
  • Meu camarada eu conseguir fazer o PIVOT nas 2 tabelas

    Olha só:

    SELECT     DigProdDataEnt, FunMatFunc AS Mat, FunNome AS Funcionario, [Corte (A3)] AS CORTE, [Nada Apurado (NA)] AS NA
    FROM         tblOrdResult RIGHT JOIN
                          (tblFuncionario RIGHT JOIN
                          qryUniPontosM_A ON tblFuncionario.FunNome = qryUniPontosM_A.FuncMA) ON
                          tblOrdResult.OrdResultado = qryUniPontosM_A.ResDescricao PIVOT (SUM([ResVlrPontos]) FOR OrdResultado IN ([Corte (A3)], [Nada Apurado (NA)])) Pt

    Mas no VALOR das colunas: CORTE e NA não é somente o que está no campo "[ResVlrPontos]" e sim "[DigProdQdtTar]*[ResVlrPontos]". So que quando coloco esta espressão ela não reconhece o "*"

    ....PIVOT (SUM([DigProdQdtTar]*[ResVlrPontos])... Erro -- "Sintaxe incorreta próximo a "*".

    Obrigado
    Vinicios Moura
    quarta-feira, 4 de novembro de 2009 12:47
  • Meu camarada muito obrigado pela ajuda eu conseguir fazer a consulta e está funcionando perfeitamente veja só como ficou

    SELECT     DigProdDataEnt, FunMatFunc AS Mat, FunNome AS Funcionario, [DigProdQdtTar] * (CASE WHEN [Corte (A3)] IS NOT NULL THEN [Corte (A3)] ELSE 0 END) AS CORTE,
                          [DigProdQdtTar] * (CASE WHEN [Nada Apurado (NA)] IS NOT NULL THEN [Nada Apurado (NA)] ELSE 0 END) AS NA,
                          (([DigProdQdtTar] * CASE WHEN [Normalização Básica] IS NOT NULL THEN [Normalização Básica] ELSE 0 END)
                          + ([DigProdQdtTar] * CASE WHEN [INSPEÇÃO DEFEITO NORMALIZ. S\ MATERIAL] IS NOT NULL THEN [INSPEÇÃO DEFEITO NORMALIZ. S\ MATERIAL] ELSE 0 END)
                          + ([DigProdQdtTar] * CASE WHEN [INSPEÇÃO TOI NORMALIZ. S\ MATERIAL] IS NOT NULL THEN [INSPEÇÃO TOI NORMALIZ. S\ MATERIAL] ELSE 0 END))
                          AS tESTE
    FROM         tblOrdResult RIGHT JOIN
                          (tblFuncionario RIGHT JOIN
                          qryUniPontosM_A ON tblFuncionario.FunNome = qryUniPontosM_A.FuncMA) ON
                          tblOrdResult.OrdResultado = qryUniPontosM_A.ResDescricao PIVOT (SUM([ResVlrPontos]) FOR OrdResultado IN ([Corte (A3)], [Nada Apurado (NA)],
                          [Normalização Básica], [INSPEÇÃO DEFEITO NORMALIZ. S\ MATERIAL], [INSPEÇÃO TOI NORMALIZ. S\ MATERIAL])) Pt

    Obrigado pelas dicas quando precisar e se eu puder te ajudadr estarei aqui é só chamar. Valeu!
    Vinicios Moura
    • Marcado como Resposta Vinicios Moura quarta-feira, 4 de novembro de 2009 16:16
    quarta-feira, 4 de novembro de 2009 14:56
  • Moura,

    Show de bola, que bom que você conseguiu, espero ter ajudado.
    Pedro Antonio Galvão Junior - MVP - Windows Server System - SQL Server/Coordenador de Projetos/DBA
    quarta-feira, 4 de novembro de 2009 17:05
    Moderador