none
Select agrupando e contando linhas RRS feed

  • Pergunta

  • Pessoal,  gostaria de saber se alguem conhece algum metodo  facil de retornar um resultado, agrupando e contando registros.

    Tb_resumo -> registros

    Modelo Serial

    AAA XXX

    AAA YYY

    AAA ZZZ

    BBB UUU

    BBB PPP

    Preciso fazer um select que me retorne assim:

    Result  -> 3 Itens - Modelo AAA - Seriais (XXX,YYYY,ZZZ);  2 Itens - Modelo BBB- Seriais (UUU,PPP)



    Fabiano Pires


    • Editado Fabiano Pires segunda-feira, 24 de agosto de 2015 17:49
    segunda-feira, 24 de agosto de 2015 17:49

Respostas

  • Boa tarde,

    Experimente mais ou menos dessa forma:

    with CTE_Agrup as
    (
        SELECT 
            a.Modelo, 
            COUNT(*) as QtdItens,
            STUFF( 
                (SELECT ', ' + s.Serial
                 FROM Tb_resumo as s
                 WHERE s.Modelo = a.Modelo
                 FOR XML PATH(''), TYPE).value('.', 'varchar(max)')
                ,1, 2, '') as Seriais
        FROM Tb_resumo as a
        group by
            a.Modelo
    )
    
    SELECT 
        STUFF( 
            (SELECT 
                 '; ' + 
                 CAST(QtdItens as varchar) + 
                 ' Itens - Modelo ' + 
                 Modelo + 
                 ' - Seriais (' + 
                 Seriais + 
                 ')'
             FROM CTE_Agrup
             FOR XML PATH(''), TYPE).value('.', 'varchar(max)')
            ,1, 2, '')
    

    Espero que ajude.


    Assinatura: http://www.imoveisemexposicao.com.br

    • Marcado como Resposta Fabiano Pires segunda-feira, 24 de agosto de 2015 19:00
    segunda-feira, 24 de agosto de 2015 18:42
  • Experimente alterar apenas o final onde estava o Set pelo trecho abaixo:

    SELECT
        @RET =
            STUFF( 
                (SELECT 
                     '; ' + 
                     CAST(QtdItens as varchar) + 
                     ' Item(s) - Modelo ' + 
                     PRODUTO + 
                     ' - Seriais (' + 
                     Seriais + 
                     ')'
                 FROM CTE_Agrup
                 FOR XML PATH(''), TYPE).value('.', 'varchar(max)') ,1, 2, '');

    Espero que ajude.


    Assinatura: http://www.imoveisemexposicao.com.br

    • Marcado como Resposta Fabiano Pires quarta-feira, 26 de agosto de 2015 19:26
    terça-feira, 25 de agosto de 2015 21:00
  • segue

    FUNCTION [dbo].[F_PSQ_VND_RET_ULT_EQTO]
    (
    	 @pPARC_COD 	INT 
    	,@pCONP_COD		INT
    	,@dULT_REC_PED	DATETIME
    ) 
    
    RETURNS VARCHAR(MAX) 
    
    AS
    
    BEGIN
    
    DECLARE  @RET VARCHAR(MAX)
    SET @RET=''
    SET @dULT_REC_PED= DATEADD(m,-2,@dULT_REC_PED)
    	
    ;with 
        CTE_Produtos as
        (
            SELECT 
                PRODUTO = 
                    CASE WHEN DBO.F_PROP_ITEM_RET_PRODUTO(ITE_CODIGO,'d') = 'DIVERSOS' 
                        THEN DBO.F_PROP_ITEM_RET_MODEQ_CONCAT(ITE_CODIGO)
                        ELSE DBO.F_PROP_ITEM_RET_PRODUTO(ITE_CODIGO,'d')
                    END
    	   ,os = DBO.F_OS_RET_NOVO_NUMERO_SEQ_MASCARADO(OS)
           FROM OS
           WHERE (CODCLI=@pPARC_COD) AND (CONP_COD_PSQ=@pCONP_COD)
           AND CONVERT(CHAR(8),[REC PEDIDO],112)  >=  CONVERT(CHAR(8),@dULT_REC_PED,112)
        ),
    
        CTE_Agrup AS 
        (
            SELECT 
                  a.produto
                , COUNT(*) as QtdItens
                , STUFF( 
                    (SELECT ', ' + s.os
                     FROM CTE_Produtos as s
                     WHERE s.PRODUTO  = a.PRODUTO
                     FOR XML PATH(''), TYPE).value('.', 'varchar(max)'),1, 2, '') as Seriais
            FROM CTE_Produtos as a
            group by a.PRODUTO 
        )
    
    SELECT
        @RET =
            STUFF( 
                (SELECT 
                     '; ' + 
                     CAST(QtdItens as varchar) + 
                     ' Item(s) - Modelo ' + 
                     PRODUTO + 
                     ' - Seriais (' + 
                     Seriais + 
                     ')'
                 FROM CTE_Agrup
                 FOR XML PATH(''), TYPE).value('.', 'varchar(max)') ,1, 2, '');
                     
    
    RETURN LTRIM(RTRIM(@RET))
    
      
    END


    Fabiano Pires

    • Marcado como Resposta Fabiano Pires quarta-feira, 26 de agosto de 2015 19:25
    quarta-feira, 26 de agosto de 2015 16:06
  • creio que voce nao leu o artigo que eu enviei:

    http://sqlhints.com/2012/02/04/insertupdate-failed-because-the-following-set-options-have-incorrect-settings-quoted_identifier/

    Voce tem que criar sua funçao com o Quoted Identifier ON

    Drop Function [dbo].[F_PSQ_VND_RET_ULT_EQTO]
    go
    SET QUOTED_IDENTIFIER ON
    go
    Create FUNCTION [dbo].[F_PSQ_VND_RET_ULT_EQTO]
    (
    	 @pPARC_COD 	INT 
    	,@pCONP_COD		INT
    	,@dULT_REC_PED	DATETIME
    ) 
    
    RETURNS VARCHAR(MAX) 
    
    AS
    
    BEGIN
    
    DECLARE  @RET VARCHAR(MAX)
    SET @RET=''
    SET @dULT_REC_PED= DATEADD(m,-2,@dULT_REC_PED)
    	
    ;with 
        CTE_Produtos as
        (
            SELECT 
                PRODUTO = 
                    CASE WHEN DBO.F_PROP_ITEM_RET_PRODUTO(ITE_CODIGO,'d') = 'DIVERSOS' 
                        THEN DBO.F_PROP_ITEM_RET_MODEQ_CONCAT(ITE_CODIGO)
                        ELSE DBO.F_PROP_ITEM_RET_PRODUTO(ITE_CODIGO,'d')
                    END
    	   ,os = DBO.F_OS_RET_NOVO_NUMERO_SEQ_MASCARADO(OS)
           FROM OS
           WHERE (CODCLI=@pPARC_COD) AND (CONP_COD_PSQ=@pCONP_COD)
           AND CONVERT(CHAR(8),[REC PEDIDO],112)  >=  CONVERT(CHAR(8),@dULT_REC_PED,112)
        ),
    
        CTE_Agrup AS 
        (
            SELECT 
                  a.produto
                , COUNT(*) as QtdItens
                , STUFF( 
                    (SELECT ', ' + s.os
                     FROM CTE_Produtos as s
                     WHERE s.PRODUTO  = a.PRODUTO
                     FOR XML PATH(''), TYPE).value('.', 'varchar(max)'),1, 2, '') as Seriais
            FROM CTE_Produtos as a
            group by a.PRODUTO 
        )
    
    SELECT
        @RET =
            STUFF( 
                (SELECT 
                     '; ' + 
                     CAST(QtdItens as varchar) + 
                     ' Item(s) - Modelo ' + 
                     PRODUTO + 
                     ' - Seriais (' + 
                     Seriais + 
                     ')'
                 FROM CTE_Agrup
                 FOR XML PATH(''), TYPE).value('.', 'varchar(max)') ,1, 2, '');
                     
    
    RETURN LTRIM(RTRIM(@RET))
    
      
    END

    att


    William John Adam Trindade
    Analyste-programmeur
    ----------------------------------------------------------

    • Marcado como Resposta Fabiano Pires quarta-feira, 26 de agosto de 2015 19:25
    quarta-feira, 26 de agosto de 2015 18:23

Todas as Respostas

  • Vao ser sempre em grupo de tres? Digo o Modelo sempre sera no formato AAA, BBB, CCC, etc?

    Se sim, voce pode fazer isso:

    select substring(produto_id,1,3) as modelo, count(*) from produtos 
    group by  substring(produto_id,1,3)

    att


    William John Adam Trindade
    Analyste-programmeur
    ----------------------------------------------------------

    segunda-feira, 24 de agosto de 2015 17:53
  • O modelo AAA,BBB foi somente exemplo, podem ser maiores .

    Utilizando o group by, não terei o retorno em uma unica linha separado por ";"


    Fabiano Pires


    • Editado Fabiano Pires segunda-feira, 24 de agosto de 2015 18:15
    segunda-feira, 24 de agosto de 2015 18:11
  • MAs qual é o criterio? Existe um separador entre o modelo e o produto? Espaço por exemplo?

    Att


    William John Adam Trindade
    Analyste-programmeur
    ----------------------------------------------------------

    segunda-feira, 24 de agosto de 2015 18:12
  • sim, o resultado precisa ser conforme modelo que passei, preciso concatenar os resultados  em uma unica linha separando cada agrupamento de modelo por ";" cada serial por "," e cada parte com "-"

     3 Itens - Modelo AAA - Seriais (XXX, YYYY, ZZZ) ;  2 Itens - Modelo BBB- Seriais (UUU,PPP)

    veja se consegue entender, hoje faço isso com while, mas tenho muito codigo queria saber se tem um metodologia mais simples.


    Fabiano Pires

    segunda-feira, 24 de agosto de 2015 18:26
  • O modelo AAA,BBB foi somente exemplo, podem ser maiores .

    Utilizando o group by, não terei o retorno em uma unica linha separado por ";"


    Fabiano Pires


    Fabiano pode usar o exemplo do código do willian mas quebrando pelo'indice do primeiro espaço localizado:

    select substring(produto_id,1,charindex(' ', produto_id)) as modelo, count(*) from produtos 
    group by  substring(produto_id,1,charindex(' ', produto_id))Assim o retorno seria:

    AAA XXX

    AAA YYYY

    BBB XXXX

    ABCDEF XXXX

    ABCDEF YYYY

    -------------

    AAA 2

    BBB 1

    ABCDEF 2

    segunda-feira, 24 de agosto de 2015 18:28
  • os results precisam ser na mesma linha, tenho que contar quantos modelos agrupados existem,  e em cada modelos agrupado  concatenar os seriais na mesma linha separando por virgula,  a  cada novo agrupamento por modelo separar na mesma linha por ";"

    Fabiano Pires

    segunda-feira, 24 de agosto de 2015 18:37
  • Boa tarde,

    Experimente mais ou menos dessa forma:

    with CTE_Agrup as
    (
        SELECT 
            a.Modelo, 
            COUNT(*) as QtdItens,
            STUFF( 
                (SELECT ', ' + s.Serial
                 FROM Tb_resumo as s
                 WHERE s.Modelo = a.Modelo
                 FOR XML PATH(''), TYPE).value('.', 'varchar(max)')
                ,1, 2, '') as Seriais
        FROM Tb_resumo as a
        group by
            a.Modelo
    )
    
    SELECT 
        STUFF( 
            (SELECT 
                 '; ' + 
                 CAST(QtdItens as varchar) + 
                 ' Itens - Modelo ' + 
                 Modelo + 
                 ' - Seriais (' + 
                 Seriais + 
                 ')'
             FROM CTE_Agrup
             FOR XML PATH(''), TYPE).value('.', 'varchar(max)')
            ,1, 2, '')
    

    Espero que ajude.


    Assinatura: http://www.imoveisemexposicao.com.br

    • Marcado como Resposta Fabiano Pires segunda-feira, 24 de agosto de 2015 19:00
    segunda-feira, 24 de agosto de 2015 18:42
  • gapimex deu Certo, obrigado.

    Fabiano Pires

    segunda-feira, 24 de agosto de 2015 19:00
  • Cara, só uma duvida essa rotina não funciona em function?


    Fabiano Pires

    terça-feira, 25 de agosto de 2015 12:40
  • Não testei, mas acho a princípio que a query que sugeri pode ser utilizada dentro de uma função.

    Você teve algum problema na implementação? Qual mensagem de erro foi exibida?


    Assinatura: http://www.imoveisemexposicao.com.br

    terça-feira, 25 de agosto de 2015 13:20
  • A função compila normalmente, mas quanto executo da a critica abaixo:

    Msg 1934, Level 16, State 1, Line 1
    INSERT failed because the following SET options have incorrect settings: 'QUOTED_IDENTIFIER'. Verify that SET options are correct for use with indexed views and/or indexes on computed columns and/or filtered indexes and/or query notifications and/or XML data type methods and/or spatial index operations.


    Fabiano Pires

    terça-feira, 25 de agosto de 2015 13:26
  • voce pode colar aqui o script da funçao? O problema nao esta na query sugerida pelo gamipex, mas no insert que voce usa.

    Att


    William John Adam Trindade
    Analyste-programmeur
    ----------------------------------------------------------


    terça-feira, 25 de agosto de 2015 13:28
  • segue:

    FUNCTION [dbo].[F_PSQ_VND_RET_ULT_EQTO]
    (
    	 @pPARC_COD 	INT 
    	,@pCONP_COD	INT
    	,@dULT_REC_PED	DATETIME 
    ) 
    
    RETURNS VARCHAR(MAX) 
    
    AS
    
    BEGIN
    
    	DECLARE  @RET VARCHAR(MAX)
    	SET @RET=''
    	SET @dULT_REC_PED= DATEADD(m,-2,@dULT_REC_PED)
    	
    -----------------------------------------------------------------------------------------------
    
    --GERAR TEMPORARIA COM PRODUTOS
    DECLARE @TB_DATA TABLE
    		(
    		 PRODUTO	VARCHAR(100)
    		,OS		    VARCHAR(8)
    		)
    		
    INSERT @TB_DATA (PRODUTO,OS)
    SELECT PRODUTO =  CASE WHEN DBO.F_PROP_ITEM_RET_PRODUTO(ITE_CODIGO,'d') = 'DIVERSOS' THEN DBO.F_PROP_ITEM_RET_MODEQ_CONCAT(ITE_CODIGO)
    						ELSE DBO.F_PROP_ITEM_RET_PRODUTO(ITE_CODIGO,'d')
    				  END
    	   ,DBO.F_OS_RET_NOVO_NUMERO_SEQ_MASCARADO(OS)
    FROM OS
    WHERE (CODCLI=@pPARC_COD) AND (CONP_COD_PSQ=@pCONP_COD)
    AND CONVERT(CHAR(8),[REC_PEDIDO],112)  >=  CONVERT(CHAR(8),@dULT_REC_PED,112)  
    ------------------------------------------------------------------------------------			
    
    
    DECLARE @RESULT TABLE 
    (RESULT VARCHAR(MAX))
    
    BEGIN
    ;with CTE_Agrup AS 
    (
        SELECT 
              a.produto
            , COUNT(*) as QtdItens
            , STUFF( 
                (SELECT ', ' + s.os
                 FROM @TB_DATA as s
                 WHERE s.PRODUTO  = a.PRODUTO
                 FOR XML PATH(''), TYPE).value('.', 'varchar(max)'),1, 2, '') as Seriais
        FROM @TB_DATA as a
        group by a.PRODUTO 
    )
    
    INSERT @RESULT (RESULT)
    SELECT
        STUFF( 
    			 (SELECT 
                 '; ' + 
                 CAST(QtdItens as varchar) + 
                 ' Item(s) - Modelo ' + 
                 PRODUTO + 
                 ' - Seriais (' + 
                 Seriais + 
                 ')'
    			FROM CTE_Agrup
    			FOR XML PATH(''), TYPE).value('.', 'varchar(max)') ,1, 2, '')
           
    END
    
    
    
    
    RETURN LTRIM(RTRIM(@RET))
       
      
    END
    


    Fabiano Pires

    terça-feira, 25 de agosto de 2015 13:36
  • esse artigo mostra como resolver o problema:

    http://sqlhints.com/2012/02/04/insertupdate-failed-because-the-following-set-options-have-incorrect-settings-quoted_identifier/

    att


    William John Adam Trindade
    Analyste-programmeur
    ----------------------------------------------------------

    terça-feira, 25 de agosto de 2015 13:51
  • Fabiano, experimente mais ou menos dessa forma:

    DECLARE  @RET VARCHAR(MAX)
    SET @RET=''
    SET @dULT_REC_PED= DATEADD(m,-2,@dULT_REC_PED)
    	
    with 
        CTE_Produtos as
        (
            SELECT 
                PRODUTO = 
                    CASE WHEN DBO.F_PROP_ITEM_RET_PRODUTO(ITE_CODIGO,'d') = 'DIVERSOS' 
                        THEN DBO.F_PROP_ITEM_RET_MODEQ_CONCAT(ITE_CODIGO)
                        ELSE DBO.F_PROP_ITEM_RET_PRODUTO(ITE_CODIGO,'d')
                    END
    	   ,DBO.F_OS_RET_NOVO_NUMERO_SEQ_MASCARADO(OS)
           FROM OS
           WHERE (CODCLI=@pPARC_COD) AND (CONP_COD_PSQ=@pCONP_COD)
           AND CONVERT(CHAR(8),[REC_PEDIDO],112)  >=  CONVERT(CHAR(8),@dULT_REC_PED,112)
        ),
    
        CTE_Agrup AS 
        (
            SELECT 
                  a.produto
                , COUNT(*) as QtdItens
                , STUFF( 
                    (SELECT ', ' + s.os
                     FROM CTE_Produtos as s
                     WHERE s.PRODUTO  = a.PRODUTO
                     FOR XML PATH(''), TYPE).value('.', 'varchar(max)'),1, 2, '') as Seriais
            FROM CTE_Produtos as a
            group by a.PRODUTO 
        )
    
    SET @RET =
        SELECT
            STUFF( 
                (SELECT 
                     '; ' + 
                     CAST(QtdItens as varchar) + 
                     ' Item(s) - Modelo ' + 
                     PRODUTO + 
                     ' - Seriais (' + 
                     Seriais + 
                     ')'
                 FROM CTE_Agrup
                 FOR XML PATH(''), TYPE).value('.', 'varchar(max)') ,1, 2, '');
           
    
    RETURN LTRIM(RTRIM(@RET))

    Espero que ajude.


    Assinatura: http://www.imoveisemexposicao.com.br

    terça-feira, 25 de agosto de 2015 14:15
  • Que misterio, me retorna erro na linha do SET

    SET @RET = SELECT

    "Incorrect syntax near the keyword 'SET'."


    Fabiano Pires

    terça-feira, 25 de agosto de 2015 19:53
  • Experimente alterar apenas o final onde estava o Set pelo trecho abaixo:

    SELECT
        @RET =
            STUFF( 
                (SELECT 
                     '; ' + 
                     CAST(QtdItens as varchar) + 
                     ' Item(s) - Modelo ' + 
                     PRODUTO + 
                     ' - Seriais (' + 
                     Seriais + 
                     ')'
                 FROM CTE_Agrup
                 FOR XML PATH(''), TYPE).value('.', 'varchar(max)') ,1, 2, '');

    Espero que ajude.


    Assinatura: http://www.imoveisemexposicao.com.br

    • Marcado como Resposta Fabiano Pires quarta-feira, 26 de agosto de 2015 19:26
    terça-feira, 25 de agosto de 2015 21:00
  • agora compilou a function, porem ao executar a critica volta.

    Msg 1934, Level 16, State 1, Line 1
    SELECT failed because the following SET options have incorrect settings: 'QUOTED_IDENTIFIER'. Verify that SET options are correct for use with indexed views and/or indexes on computed columns and/or filtered indexes and/or query notifications and/or XML data type methods and/or spatial index operations.


    Fabiano Pires

    quarta-feira, 26 de agosto de 2015 10:24
  • Você pode postar um exemplo de como está tentando usar a função?

    Assinatura: http://www.imoveisemexposicao.com.br

    quarta-feira, 26 de agosto de 2015 14:38
  • segue

    FUNCTION [dbo].[F_PSQ_VND_RET_ULT_EQTO]
    (
    	 @pPARC_COD 	INT 
    	,@pCONP_COD		INT
    	,@dULT_REC_PED	DATETIME
    ) 
    
    RETURNS VARCHAR(MAX) 
    
    AS
    
    BEGIN
    
    DECLARE  @RET VARCHAR(MAX)
    SET @RET=''
    SET @dULT_REC_PED= DATEADD(m,-2,@dULT_REC_PED)
    	
    ;with 
        CTE_Produtos as
        (
            SELECT 
                PRODUTO = 
                    CASE WHEN DBO.F_PROP_ITEM_RET_PRODUTO(ITE_CODIGO,'d') = 'DIVERSOS' 
                        THEN DBO.F_PROP_ITEM_RET_MODEQ_CONCAT(ITE_CODIGO)
                        ELSE DBO.F_PROP_ITEM_RET_PRODUTO(ITE_CODIGO,'d')
                    END
    	   ,os = DBO.F_OS_RET_NOVO_NUMERO_SEQ_MASCARADO(OS)
           FROM OS
           WHERE (CODCLI=@pPARC_COD) AND (CONP_COD_PSQ=@pCONP_COD)
           AND CONVERT(CHAR(8),[REC PEDIDO],112)  >=  CONVERT(CHAR(8),@dULT_REC_PED,112)
        ),
    
        CTE_Agrup AS 
        (
            SELECT 
                  a.produto
                , COUNT(*) as QtdItens
                , STUFF( 
                    (SELECT ', ' + s.os
                     FROM CTE_Produtos as s
                     WHERE s.PRODUTO  = a.PRODUTO
                     FOR XML PATH(''), TYPE).value('.', 'varchar(max)'),1, 2, '') as Seriais
            FROM CTE_Produtos as a
            group by a.PRODUTO 
        )
    
    SELECT
        @RET =
            STUFF( 
                (SELECT 
                     '; ' + 
                     CAST(QtdItens as varchar) + 
                     ' Item(s) - Modelo ' + 
                     PRODUTO + 
                     ' - Seriais (' + 
                     Seriais + 
                     ')'
                 FROM CTE_Agrup
                 FOR XML PATH(''), TYPE).value('.', 'varchar(max)') ,1, 2, '');
                     
    
    RETURN LTRIM(RTRIM(@RET))
    
      
    END


    Fabiano Pires

    • Marcado como Resposta Fabiano Pires quarta-feira, 26 de agosto de 2015 19:25
    quarta-feira, 26 de agosto de 2015 16:06
  • Você disse anteriormente que está ocorrendo um erro ao executar a função.

    Como você está executando essa função?


    Assinatura: http://www.imoveisemexposicao.com.br

    quarta-feira, 26 de agosto de 2015 17:12
  • executo assim:

    select dbo.F_PSQ_VND_RET_ULT_EQTO (11111,2222,'2015-08-26 00:00:00.000')


    Fabiano Pires

    quarta-feira, 26 de agosto de 2015 18:16
  • creio que voce nao leu o artigo que eu enviei:

    http://sqlhints.com/2012/02/04/insertupdate-failed-because-the-following-set-options-have-incorrect-settings-quoted_identifier/

    Voce tem que criar sua funçao com o Quoted Identifier ON

    Drop Function [dbo].[F_PSQ_VND_RET_ULT_EQTO]
    go
    SET QUOTED_IDENTIFIER ON
    go
    Create FUNCTION [dbo].[F_PSQ_VND_RET_ULT_EQTO]
    (
    	 @pPARC_COD 	INT 
    	,@pCONP_COD		INT
    	,@dULT_REC_PED	DATETIME
    ) 
    
    RETURNS VARCHAR(MAX) 
    
    AS
    
    BEGIN
    
    DECLARE  @RET VARCHAR(MAX)
    SET @RET=''
    SET @dULT_REC_PED= DATEADD(m,-2,@dULT_REC_PED)
    	
    ;with 
        CTE_Produtos as
        (
            SELECT 
                PRODUTO = 
                    CASE WHEN DBO.F_PROP_ITEM_RET_PRODUTO(ITE_CODIGO,'d') = 'DIVERSOS' 
                        THEN DBO.F_PROP_ITEM_RET_MODEQ_CONCAT(ITE_CODIGO)
                        ELSE DBO.F_PROP_ITEM_RET_PRODUTO(ITE_CODIGO,'d')
                    END
    	   ,os = DBO.F_OS_RET_NOVO_NUMERO_SEQ_MASCARADO(OS)
           FROM OS
           WHERE (CODCLI=@pPARC_COD) AND (CONP_COD_PSQ=@pCONP_COD)
           AND CONVERT(CHAR(8),[REC PEDIDO],112)  >=  CONVERT(CHAR(8),@dULT_REC_PED,112)
        ),
    
        CTE_Agrup AS 
        (
            SELECT 
                  a.produto
                , COUNT(*) as QtdItens
                , STUFF( 
                    (SELECT ', ' + s.os
                     FROM CTE_Produtos as s
                     WHERE s.PRODUTO  = a.PRODUTO
                     FOR XML PATH(''), TYPE).value('.', 'varchar(max)'),1, 2, '') as Seriais
            FROM CTE_Produtos as a
            group by a.PRODUTO 
        )
    
    SELECT
        @RET =
            STUFF( 
                (SELECT 
                     '; ' + 
                     CAST(QtdItens as varchar) + 
                     ' Item(s) - Modelo ' + 
                     PRODUTO + 
                     ' - Seriais (' + 
                     Seriais + 
                     ')'
                 FROM CTE_Agrup
                 FOR XML PATH(''), TYPE).value('.', 'varchar(max)') ,1, 2, '');
                     
    
    RETURN LTRIM(RTRIM(@RET))
    
      
    END

    att


    William John Adam Trindade
    Analyste-programmeur
    ----------------------------------------------------------

    • Marcado como Resposta Fabiano Pires quarta-feira, 26 de agosto de 2015 19:25
    quarta-feira, 26 de agosto de 2015 18:23
  • Agora deu certo, eu tinha lido o artigo mas coloquei no lugar errado.

    obrigado pessoal.


    Fabiano Pires

    quarta-feira, 26 de agosto de 2015 19:25