[英]Select multiple records from same table
我正在嘗試編寫一個查詢,該查詢將從表中選擇兩個不同的結果。
讓我們假設以下是表出售:
Supp items
A 1
A 1
A 3
A -1 //negative represent return item
B 1
我想選擇促銷產品和退貨的總和。 因此,結果如下:
Supp Sale Return
A 5 1
B 1 0
我正在嘗試跟蹤查詢,但未獲得期望的結果
select
t.Supp, count(t.items)'Quantity', count(s.items)'ReturnedQuantity'
from sale t, sale s
where t.items='1' and s.items='-1'
group by
t.supp,s.supp
order by
sum(cast(t.items as int)) desc
有人會告訴我要查詢什么才能得到此結果嗎?
SELECT
Supp
, SUM( CASE WHEN items > 0
THEN items
ELSE 0
END
)
AS SoldQuantity
, - SUM( CASE WHEN items < 0
THEN items
ELSE 0
END
)
AS ReturnedQuantity
FROM sale
GROUP BY Supp
ORDER BY SoldQuantity DESC --- or ORDER BY Supp
--- whatever is needed
原始查詢出了什么問題:
首先,應在使用SUM()
時使用COUNT()
SUM()
。
其次,您加入兩個表sale
實例。 如果您使用了t.items >0 AND s.items < 0
這可能會奏效t.items >0 AND s.items < 0
但這會更加復雜,您還需要t.supp = s.supp
。 不必要的復雜性(甚至可能甚至無法正常工作)。
第三, where t.items='1' and s.items='-1'
條件不會將任何行與1
或-1
不同的行相加。 而且您很奇怪地有一些不同,例如3
。
SELECT t.Supp AS 'Supp', SUM(t.items) AS 'Sale', SUM(t.return_items) AS 'Return' FROM (
SELECT Supp AS Supp,
CASE WHEN items < 0 THEN 0 ELSE items END AS items,
CASE WHEN items > 0 THEN 0 ELSE -items END AS return_items
FROM tb_Test
) AS t
GROUP BY t.Supp
ORDER BY 'Sale' desc
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.