none
CTE nao agrupa RRS feed

  • Pergunta

  • Boa tarde a todos,

    Prezados nao sei aonde esta esse misterio, na Sql abaixo nao esta agrupando,

    SQL

    SELECT
     (R.CODFUNCAO)    AS 'C',
     (R.FUNCAOATUAL)  AS 'C1'/*,
    (R.DT)            AS 'DT',
    MAX(R.DT1)          AS 'DT1'*/
    FROM
    (
    SELECT F.CODFUNCAO  AS 'CODFUNCAO',
    NULL                 AS 'FUNCAOATUAL'/*,        
    DTMUDANCA           AS 'DT',
    NULL                AS 'DT1'*/
    FROM PFUNC AS P
    INNER JOIN PFHSTFCO      AS F  (NOLOCK)ON F.CODCOLIGADA  = P.CODCOLIGADA AND F.CHAPA   = P.CHAPA
    INNER JOIN PFUNCAO       AS P1 (NOLOCK)ON P1.CODCOLIGADA = F.CODCOLIGADA AND P1.CODIGO = F.CODFUNCAO
    WHERE P.CHAPA  =  '010684'
    AND F.MOTIVO = '02'
    UNION

    SELECT NULL    AS 'CODFUNCAO',
    F.CODFUNCAO   AS 'FUNCAOATUAL'/*,
    null          AS 'DT',
    MAX(F.DTMUDANCA)   AS 'DT1'*/


     FROM PFUNC AS P
    INNER JOIN PFHSTFCO      AS F  (NOLOCK)ON F.CODCOLIGADA  = P.CODCOLIGADA AND F.CHAPA   = P.CHAPA
    INNER JOIN PFUNCAO       AS P1 (NOLOCK)ON P1.CODCOLIGADA = F.CODCOLIGADA AND P1.CODIGO = F.CODFUNCAO
    WHERE P.CHAPA  =  '010684'
    AND F.MOTIVO <> '02'


    )
    R(CODFUNCAO,FUNCAOATUAL)

    GROUP BY  CODFUNCAO    ,
     FUNCAOATUAL

    Resultado

    NULL       000119
    000339    NULL

    Resultado esperado

    000339  000119

    muito obrigado a todos pela ajuda

    quarta-feira, 4 de abril de 2012 18:59

Respostas

  • Boa tarde Ronnie,

    null é diferente do valor 000339  por isto não são agrupados.

    veja se o comando abaixo retorna o que você precisa.

    WITH CTE_1 AS(
          SELECT F.CODFUNCAO AS 'CODFUNCAO', NULL AS 'FUNCAOATUAL' 
              FROM PFUNC AS P
             INNER JOIN PFHSTFCO AS F(NOLOCK)
                ON F.CODCOLIGADA = P.CODCOLIGADA
               AND F.CHAPA = P.CHAPA
             INNER JOIN PFUNCAO AS P1(NOLOCK)
                ON P1.CODCOLIGADA = F.CODCOLIGADA
               AND P1.CODIGO = F.CODFUNCAO
             WHERE P.CHAPA = '010684'
               AND F.MOTIVO = '02'
            
            UNION
            
            SELECT NULL AS 'CODFUNCAO', F.CODFUNCAO AS 'FUNCAOATUAL'        
              FROM PFUNC AS P
             INNER JOIN PFHSTFCO AS F(NOLOCK)
                ON F.CODCOLIGADA = P.CODCOLIGADA
               AND F.CHAPA = P.CHAPA
             INNER JOIN PFUNCAO AS P1(NOLOCK)
                ON P1.CODCOLIGADA = F.CODCOLIGADA
               AND P1.CODIGO = F.CODFUNCAO
             WHERE P.CHAPA = '010684'
               AND F.MOTIVO <> '02')
               
    SELECT (SELECT CODFUNCAO
    		FROM  CTE_1 WHERE CODFUNCAO IS NOT NULL)AS COL1,
    		(SELECT FUNCAOATUAL
    		FROM  CTE_1 WHERE FUNCAOATUAL IS NOT NULL)AS COL2

    Abçs,

    Adriano

    quarta-feira, 4 de abril de 2012 19:22

Todas as Respostas

  • Boa tarde Ronnie,

    null é diferente do valor 000339  por isto não são agrupados.

    veja se o comando abaixo retorna o que você precisa.

    WITH CTE_1 AS(
          SELECT F.CODFUNCAO AS 'CODFUNCAO', NULL AS 'FUNCAOATUAL' 
              FROM PFUNC AS P
             INNER JOIN PFHSTFCO AS F(NOLOCK)
                ON F.CODCOLIGADA = P.CODCOLIGADA
               AND F.CHAPA = P.CHAPA
             INNER JOIN PFUNCAO AS P1(NOLOCK)
                ON P1.CODCOLIGADA = F.CODCOLIGADA
               AND P1.CODIGO = F.CODFUNCAO
             WHERE P.CHAPA = '010684'
               AND F.MOTIVO = '02'
            
            UNION
            
            SELECT NULL AS 'CODFUNCAO', F.CODFUNCAO AS 'FUNCAOATUAL'        
              FROM PFUNC AS P
             INNER JOIN PFHSTFCO AS F(NOLOCK)
                ON F.CODCOLIGADA = P.CODCOLIGADA
               AND F.CHAPA = P.CHAPA
             INNER JOIN PFUNCAO AS P1(NOLOCK)
                ON P1.CODCOLIGADA = F.CODCOLIGADA
               AND P1.CODIGO = F.CODFUNCAO
             WHERE P.CHAPA = '010684'
               AND F.MOTIVO <> '02')
               
    SELECT (SELECT CODFUNCAO
    		FROM  CTE_1 WHERE CODFUNCAO IS NOT NULL)AS COL1,
    		(SELECT FUNCAOATUAL
    		FROM  CTE_1 WHERE FUNCAOATUAL IS NOT NULL)AS COL2

    Abçs,

    Adriano

    quarta-feira, 4 de abril de 2012 19:22
  • Neste problema tem a sua solucao!

    Usando SQL gere todas as possibilidades existente entre as colunas 1, 2 e 3.
    Este é um exemplo pratico de utilizacao de query recurssive aplicada a loteria dos esportes (loteca).
    O resultado deverá ser 144 aposta de 15 elemento pois deve ser basear na coluna CASA cada resultado.
    Ex de resultado:

    primeira linha == B1:A1:A1:A1:A1:B1:A1:A1:A1:A1:A1:B1:A1:A1:A1:
    ultima linha ==   B1:B1:A1:B1:A1:CA1::B1:A1:A1:B1:A1:B1:A1:B1:A1:

     

    Tabela

    CREATE TABLE [dbo].[Jogo](
     [Jogo] [float] NULL,
     [Casa] [float] NULL,
     [Coluna1] [nvarchar](3) NULL,
     [Coluna2] [nvarchar](3) NULL,
     [Coluna3] [nvarchar](3) NULL
    ) ON [PRIMARY]

    GO


    Dados da tabela jogo

    Jogo,Casa,Coluna1,Coluna2,Coluna3
    255,1,C1:,NULL,NULL
    255,2,A1:,B1:,C1:
    255,3,A1:,NULL,NULL
    255,4,A1:,C1:,NULL
    255,5,A1:,NULL,NULL
    255,6,C1:,B1:,NULL
    255,7,A1:,C1:,NULL
    255,8,A1:,NULL,NULL
    255,9,A1:,NULL,NULL
    255,10,A1:,B1:,C1:
    255,11,A1:,NULL,NULL
    255,12,C1:,NULL,NULL
    255,13,A1:,NULL,NULL
    255,14,A1:,C1:,NULL
    255,15,A1:,NULL,NULL


    Dados da tabela jogo

    Jogo Casa Coluna1 Coluna2 Coluna3
    255 1 C1: NULL NULL
    255 2 A1: B1: C1:
    255 3 A1: NULL NULL
    255 4 A1: C1: NULL
    255 5 A1: NULL NULL
    255 6 C1: B1: NULL
    255 7 A1: C1: NULL
    255 8 A1: NULL NULL
    255 9 A1: NULL NULL
    255 10 A1: B1: C1:
    255 11 A1: NULL NULL
    255 12 C1: NULL NULL
    255 13 A1: NULL NULL
    255 14 A1: C1: NULL
    255 15 A1: NULL NULL

    quinta-feira, 5 de abril de 2012 12:22
  • ola Estou procurando um codigo fonte para gerar todas as apostas da loteca se pude ajudar agradeco.

    Qualquer ajudar sera bem vinda. se puder mandar no meu email. (vbvieiras@yahoo.com.br)

    domingo, 5 de março de 2017 17:29