none
Retornar quantidade de linhas dependendo da quantidade do produto RRS feed

  • Pergunta

  • Tenho um consulta que me retorna a quantidade de itens de cada produto que o meu cliente comprou, por exemplo:

    codProduto | NomeProduto | Quantidade
    2552          |  Impressora    |   3

    Gostaria que a minha consulta retorno o produto conforme a quantidade. É possivel? Tipo:

    codProduto | NomeProduto | Quantidade
    2552          |  Impressora    |   1
    2552          |  Impressora    |   1
    2552          |  Impressora    |   1

    Deu pra entender?


    sexta-feira, 21 de novembro de 2014 14:36

Respostas

Todas as Respostas

  • Entendi o que vc quer fazer, mas não o porquê. 

    O unico jeito de fazer isso é criando um function:

    declare @var1 int;
    
    select 
        @var1 = quantidade,
    from
        compras
    where
        <criterio>
    
    DECLARE @i int = 0
    WHILE @i < @var1 BEGIN
        SET @i = @i + 1
        /* cria tabela temporaria */
    END
    
    /*retorno tabela temporaria*/

    Nao é nada trivial caso vc nunca tenha programado em TSQL

    att


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

    sexta-feira, 21 de novembro de 2014 14:47
  • Laísa,

    Você poderia postar como é a sua consulta atual?

    Isso porque, talvez você apenas removendo à cláusula "GROUP BY" e a função  "SUM" ou "COUNT" (dependendo do contexto onde sua consulta é utilizada) deve retornar este resultado.

    Segue um exemplo:

    --CONSULTA ATUAL SELECT PROD.codProduto, PROD.NomeProduto, COUNT(ITEM.codProduto) FROM TB_PRODUTO AS PROD

    INNER JOIN TB_PRODUTO_ITEM AS IETM ON PROD.codProduto = ITEM.codProduto GROUP BY PROD.codProduto, PROD.NomeProduto GO --CONSULTA SEM "GROUP BY" SELECT PROD.codProduto, PROD.NomeProduto, ITEM.codProduto FROM TB_PRODUTO AS PROD

    INNER JOIN TB_PRODUTO_ITEM AS IETM ON PROD.codProduto = ITEM.codProduto
    GO
    Isso é uma possibilidade, vendo a consulta tenho certeza que a Comunidade poderá ajudar você a encontrar a melhor solução.


    Se ajudou na sua solução, não esqueça de marcar como resposta !

    Abraços,

    Durval Ramos
    Microsoft Partner | MTA | MCSA - SQL Server 2012 | MCSE - Data Platform
    ----------------------------------
    Se foi resolvido clique "Marcar como resposta" e se foi útil "Votar como Útil"

    sexta-feira, 21 de novembro de 2014 15:26
    Moderador
  • A Consulta é a seguinte:

    SELECT pes.cod_pessoa, pes.nome_pessoa, pro.nome_Produto, iven.quantidade, ven.num_venda, MAX(CONVERT(VARCHAR(15),ven.DATA,103)) AS data_venda, usu.nome_usuario
    FROM dbo.TAB_PESSOA pes
    INNER JOIN 
    dbo.TAB_VENDA ven 
    ON ven.COD_PESSOA = pes.COD_PESSOA
    INNER JOIN 
    dbo.tab_item_venda iven 
    ON iven.num_Venda = ven.NUM_VENDA
    INNER JOIN 
    dbo.tab_produto pro 
    ON pro.cod_produto = iven.cod_produto
    INNER JOIN 
    dbo.tab_usuario usu 
    ON usu.cod_usuario = ven.cod_vendedor
    WHERE 
    pro.nome_Produto LIKE '%Zebra%' AND
        ven.tipo_Venda <> 'X' AND
        ven.DATA BETWEEN '2014-04-01' AND '2014-10-31'
    GROUP BY 
    pes.COD_PESSOA,
    pes.NOME_PESSOA,
    ven.DATA,
    usu.nome_usuario,
    pro.nome_Produto,
    iven.quantidade,
    ven.num_venda

    ORDER BY ven.DATA DESC

    se eu retiro o group by o sql server retorno o erro: 

    Column 'dbo.TAB_PESSOA.COD_PESSOA' is invalid in the select list because it is not contained in either an aggregate function or the GROUP BY clause.

    sexta-feira, 21 de novembro de 2014 16:04
  • Deleted
    sexta-feira, 21 de novembro de 2014 17:41
  • Deleted
    sexta-feira, 21 de novembro de 2014 17:53