Với truy vấn này:
SELECT SUM(qty) AS sumQty,
cnetprodid
FROM quoteitem
WHERE ordered = 1
AND sageSOPOrderReturnLineID IS NOT NULL
AND LEN(LTRIM(RTRIM(cnetprodid))) > 0
AND cnetprodid LIKE 'S%'
AND price > 10
AND created > DATEADD(MONTH, -3, GETDATE())
GROUP BY cnetprodid
ORDER BY SUM(qty) DESC
Tôi nhận lại một hàng cho mỗi sản phẩm, hàng trên cùng có 294 sumQty
và 'S10381902' làcnetprodid
Nhập truy vấn này:
SELECT SUM(qty) AS sumQty,
p.ProdID,
p.CatID
FROM quoteitem
INNER JOIN cds_prod AS p
ON p.ProdID COLLATE Latin1_General_CI_AS = cnetprodid
INNER JOIN cds_atr AS a
ON a.ProdID COLLATE Latin1_General_CI_AS = p.ProdID
INNER JOIN lan_cat_sections AS c
ON c.attID = a.atrID
OR ( LEN(ISNULL(c.attID, '')) = 0
AND c.cat_id LIKE p.CatID + '%' )
AND ( ( c.[include] = 0
AND a.valID NOT IN (SELECT Value
FROM Split(c.valID, ',')) )
OR ( c.[include] = 1
AND a.valID IN (SELECT Value
FROM Split(c.valID, ',')) ) )
WHERE ordered = 1
AND sageSOPOrderReturnLineID IS NOT NULL
AND LEN(LTRIM(RTRIM(cnetprodid))) > 0
AND cnetprodid LIKE 'S%'
AND price > 10
AND created > DATEADD(MONTH, -3, GETDATE())
GROUP BY p.ProdID,
p.CatID,
a.prodID
HAVING SUM(qty) > 10
ORDER BY SUM(qty) DESC
Tôi nhận được một hàng cho mỗi sản phẩm trở lại nhưng bây giờ hàng có 'S10381902' vì ProdID
cột có số liệu là 8820 sumQty
.
Tất cả những gì tôi muốn là một con số cho bao nhiêu sản phẩm đã được bán trong quý vừa qua, không quan tâm đến các sản phẩm đã bán dưới 10 đơn vị, do đó là HAVING
một phần.
Có COLLATE
bởi vì các bảng đến từ các cơ sở dữ liệu khác nhau; một là trong SQL_Latin1_General_CP1_CI_AS
và một cơ sở dữ liệu khác là trong Latin1_General_CI_AS
.
Câu đố: http://sqlfiddle.com/#!3/ce1ed/4