簡體   English   中英

從同一表中選擇多個記錄

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM