過濾

2017-09-10 55 views
1

我有這樣的SQL在SQL Server:過濾

SELECT 
    Itens.Mercadoria, Mercadoria.Nome, Cabecalho.Data, 
    SUM(ValorUnitario) AS Total, 
    SUM(Quantidade) AS Quantidade 
FROM 
    Itens 
INNER JOIN 
    Mercadoria ON Itens.Mercadoria = Mercadoria.Codigo 
INNER JOIN 
    Cabecalho ON Cabecalho.Codigo = Itens.Cabecalho 
WHERE 
    Cabecalho.Data >= '2016-01-01' 
    AND Cabecalho.Data <= '2018-12-31' 
GROUP BY 
    Itens.Mercadoria, Mercadoria.Nome, Cabecalho.Data 
ORDER BY 
    4 DESC 

它返回以下結果。

enter image description here

高亮顯示的值重複,我不想重複,我想只顯示一次,每個項目的QuantidadeTotal字段SUM。

例如:

`Camisa Polo` -> **Quantidade = 23** 
`Calça Jeans` -> **Quantidade = 15** 
`Camiseta Estampada` -> **Quantidade = 21** 
+0

你說「有過濾」,如果有,你並不意味着SQL的HAVING句話,那麼你應該檢查這... SQL查詢來選擇兩個日期之間的https日期://計算器.com/q/5125076/2507654 – alex

+0

銷售與SalesItems之間的關係是什麼? – scaisEdge

+0

這些表格如何與彼此相關?我看到SaleItem中的IdProduct,但將SaleItems連接到Sales的是什麼? –

回答

1

假設thate銷售和SaleItems之間的關係是基於SalesId 可以分配之間使用your_start_date和your_end_date適當值

select Products.ProductName 
     , sum(SaleItems.Price) 
     , sum(SaleItems.Quantity) 
    from Products 
    inner join SaleItems on SaleItems.IdProduct = Products.IdProduct 
    inner join Sales on Sales.IdSale = SaleItems.IdSale 
    where SaleDate between your_start_date and your_end_date 
    group by Products.ProductName 

在你的情況下刪除或彙總Cabecalho.Data列,例如:

SELECT Itens.Mercadoria 
     , Mercadoria.Nome 
     , SUM(ValorUnitario) AS Total 
     , SUM(Quantidade) AS Quantidade 
    FROM Itens INNER JOIN Mercadoria ON Itens.Mercadoria = Mercadoria.Codigo 
    INNER JOIN Cabecalho ON Cabecalho.Codigo = Itens.Cabecalho 
    WHERE Cabecalho.Data between '2016-01-01' AND '2018-12-31' 
    GROUP BY Itens.Mercadoria, Mercadoria.Nome 
    ORDER BY 4 DESC 

SELECT Itens.Mercadoria 
     , Mercadoria.Nome 
     , max(Cabecalho.Data) 
     , SUM(ValorUnitario) AS Total 
     , SUM(Quantidade) AS Quantidade 
    FROM Itens INNER JOIN Mercadoria ON Itens.Mercadoria = Mercadoria.Codigo 
    INNER JOIN Cabecalho ON Cabecalho.Codigo = Itens.Cabecalho 
    WHERE Cabecalho.Data between '2016-01-01' AND '2018-12-31' 
    GROUP BY Itens.Mercadoria, Mercadoria.Nome 
    ORDER BY 4 DESC 
+0

太好了,謝謝!工作正常。 – Anderson