none
UNION RRS feed

  • Pergunta

  • Bom dia a todos.

    Estou mexendo com o SSRS 2003 e durante a criação de um relatório, eu tive problemas com duplicação de informação no caso de quando eu dou um SUM sem agrupamento.

    (Estou trabalhando com sql 2000)

    Uma possível solução que eu encontrei foi criar um select muito parecido com o original do relatório e dar um UNION nos dois para que eu tenha essa informação para colocar no meu relatório.

    O estranho é que separadas, os dois selects funcionam. Quando eu rodo as duas juntas (sem UNION) funciona perfeitamente (mostrando os resultados em grids diferentes), mas quando eu adiciono o UNION (os dois selects possuem o mesmo numero de colunas), o SQL fala que tem um erro de sintaxe perto da palavra UNION.

    Alguém poderia me ajudar a entender o porque disso e uma possivel solução.

     

    Atenciosamente,

    Pedro

    quinta-feira, 15 de fevereiro de 2007 12:19

Respostas

Todas as Respostas

  • Bom dia Pedro

     

    Você pode enviar os Selects ?

    quinta-feira, 15 de fevereiro de 2007 12:33
  • SELECT
            atend.DeptoCodigo,
            depto.DeptoDescricao,
           ISNULL(parc.RazaoSocial, '-1') AS RazaoSocial,
           SUM(DISTINCT atend.QtdeAtendimento) AS AtendimentoEscola,
           SUM(DISTINCT atend.QtdVoluntariosParticipantes) AS VoluntarioEscola,
           ISNULL(SUM(DISTINCT propoParc.QtdAtendimento),0) AS AtendimentoParceiro,
           ISNULL(SUM(DISTINCT propoParc.QtdVoluntariosParticipantes),0) AS VoluntarioParceiro
    FROM
            VoluntAtendimento atend
    INNER JOIN
            Deptos depto
    ON
           depto.DeptoCodigo  = atend.DeptoCodigo
    LEFT JOIN
            VoluntPropostaParceiro propoParc
    ON
            propoParc.DeptoCodigo  = atend.DeptoCodigo  AND
            propoParc.SecaoCodigo  = atend.SecaoCodigo  AND
            propoParc.ProjetoCodigo  = atend.ProjetoCodigo/*  AND
            propoParc.PropostaCodigo = atend.PropostaCodigo*/
    LEFT JOIN
            VoluntParceiro  parc
    ON
           parc.DeptoCodigo  = atend.DeptoCodigo  AND
           parc.SecaoCodigo  = atend.SecaoCodigo  AND
           parc.ParceiroCodigo  = propoParc.ParceiroCodigo
    WHERE
           atend.ProjetoCodigo  = 1
    GROUP BY
           atend.DeptoCodigo,
           depto.DeptoDescricao,
           parc.RazaoSocial 
    ORDER BY
           atend.DeptoCodigo

    UNION


    SELECT
           '-1' AS DeptoCodigo,
           '-1' AS DeptoDescricao,
           '-1' AS RazaoSocial,
           SUM(DISTINCT atend.QtdeAtendimento) AS AtendimentoEscola,
           SUM(DISTINCT atend.QtdVoluntariosParticipantes) AS VoluntarioEscola,
           SUM(DISTINCT propoParc.QtdAtendimento) AS AtendimentoParceiro,
           SUM(DISTINCT propoParc.QtdVoluntariosParticipantes) AS VoluntarioParceiro
    FROM
           VoluntAtendimento atend
    LEFT JOIN
           VoluntPropostaParceiro propoParc
    ON
           propoParc.DeptoCodigo  = atend.DeptoCodigo  AND
           propoParc.SecaoCodigo  = atend.SecaoCodigo  AND
           propoParc.ProjetoCodigo  = atend.ProjetoCodigo  /*AND
           propoParc.PropostaCodigo = atend.PropostaCodigo*/
    WHERE
           atend.ProjetoCodigo  = 1

    quinta-feira, 15 de fevereiro de 2007 12:38
  • Encontrei o problema. Tava no Order by do 1o select.

    Em casos de UNION, o order by deve estar no 2o select.

     

    quinta-feira, 15 de fevereiro de 2007 13:05