Sqlserver
 sql >> база данни >  >> RDS >> Sqlserver

Използване на условен агрегат в SQL Server 2008

Просто добавете втората заявка в списъка с колони на първата заявка, тъй като тя ще върне само един ред. Опитайте това.

SELECT Sum(CASE
             WHEN MONTH = '2013-8-1' THEN CurrentStock
             ELSE 0
           END)                                 AS CurrentStock,
       Isnull(Sum(CASE WHEN MONTH = '2014-2-1' THEN CPU ELSE 0 END), 0) - 
       Isnull(Sum(CASE WHEN MONTH = '2013-8-1' THEN CPU ELSE 0 END), 0) AS CPU,
       Sum(CASE WHEN Month = '2013-8-1' THEN NonCPUWIP ELSE 0 END) AS NonCPU,
       Isnull(Sum(CASE WHEN MONTH = '2014-2-1' THEN ScrapDiscarded ELSE 0 END), 0) - 
       Isnull(Sum(CASE WHEN MONTH = '2013-8-1' THEN ScrapDiscarded ELSE 0 END), 0)AS Scrap,
       Sum(CASE WHEN Month = '2013-8-1' THEN WaitingForApproval ELSE 0 END) AS WFA,
       (SELECT Count(STBSerialNUMBER)
        FROM   OutStock
        WHERE  DispatchDate BETWEEN '2013-8-1' AND '2014-2-1'
                AND Vendor = 'abc' ) as Despatched
FROM   Instock I
WHERE  Vendor = 'abc'

Актуализация:

Ако искате броя на резултатите от всеки модел, преобразувайте subquery го към correlated subquery . трябва да бъде нещо като

  (SELECT Count(STBSerialNUMBER)
   FROM   OutStock O
   WHERE o.model = i.model  -- here is the change
   AND O.DispatchDate BETWEEN '2013-8-1' AND '2014-2-1'
   AND o.Vendor = 'abc')

Тук за всеки model в Instock таблица съответния count в outstock ще бъдат изчислени.

Или можете също да използвате Left Join . Първо изчислете броя на всеки model в Outstock таблица join резултатът обратно към Instock таблица с помощта на модела

   ....
   From Instock I Left Join 
   (SELECT Count(STBSerialNUMBER) OutStock_count,Model
   FROM   OutStock O
   WHERE  O.DispatchDate BETWEEN '2013-8-1' AND '2014-2-1'
   AND o.Vendor = 'abc'
   Group by Model) O on o.model = i.model



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Как да създадете съхранена процедура в SQL Server

  2. Научете се да съхранявате и анализирате документи във файлова система на Windows със семантично търсене на SQL Server – част 1

  3. Трябва ли да преброя транзакциите, преди да върна една назад в catch блока в T-SQL?

  4. SqlParameter вече се съдържа от друга колекция SqlParameterCollection - мами ли using() {}?

  5. Връщане на броя на редовете, засегнати от операторите UPDATE