Sqlserver
 sql >> Baza danych >  >> RDS >> Sqlserver

Korzystanie z agregacji warunkowej w SQL Server 2008

Po prostu dodaj drugie zapytanie do listy kolumn pierwszego zapytania, ponieważ zwróci ono tylko jeden wiersz. Spróbuj tego.

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'

Aktualizacja:

Jeśli chcesz uzyskać liczbę wyników dla każdego modelu, przekonwertuj subquery go do correlated subquery . powinno być jak

  (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')

Tutaj dla każdego model w Instock podaj odpowiednią count w outstock zostaną obliczone.

Możesz też użyć Left Join . Najpierw oblicz liczbę każdego model w Outstock tabela join wynik z powrotem do Instock stół za pomocą modelu

   ....
   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. Kolumna GUID wiersza MS SQL Server

  2. Wybór procesora dla SQL Server 2014 – część 1

  3. Mutex analogowy w SQL?

  4. Obliczona kolumna w EF Code First

  5. SQL Server — Usuń wszystkie niedrukowalne znaki ASCII