Выберите несколько записей из одной таблицы - PullRequest
1 голос
/ 18 июня 2011

Я пытаюсь написать запрос, который выберет два разных результата из таблицы.

Предположим, что продажа стола следующая:

 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

Кто-нибудь скажет мне, что будет запрос, чтобы получить этот результат?

Ответы [ 2 ]

3 голосов
/ 18 июня 2011
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
3 голосов
/ 18 июня 2011
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

Что было не так с исходным запросом:

Во-первых, вы используете COUNT(), когда вы должны использовать SUM().

Во-вторых, вы присоединяетесь к двум экземплярамстол sale.Это могло бы сработать, если бы вы использовали t.items >0 AND s.items < 0 Но это было бы более сложно, и вам также понадобится t.supp = s.supp.Несомненная сложность (и она может даже не работать даже тогда).

В-третьих, условия where t.items='1' and s.items='-1' не суммируют строки с элементами, отличными от 1 или -1.И у вас совершенно разные вещи, такие как 3.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...