sql >> Databáze >  >> RDS >> Sqlserver

Použití podmíněné agregace v SQL Server 2008

Stačí přidat druhý dotaz do seznamu sloupců prvního dotazu, protože vrátí pouze jeden řádek. Zkuste toto.

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'

Aktualizace:

Pokud chcete počet výsledků každého modelu, převeďte subquery to na correlated subquery . by mělo být něco jako

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

Zde pro každý model v Instock uveďte příslušný count v outstock budou vypočítány.

Nebo můžete také použít Left Join . Nejprve spočítejte počet každého model v Outstock tabulka join výsledek zpět do Instock tabulky 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. Jak funguje SQRT() v MariaDB

  2. jak získat data z mysql v php na základě adresy URL?

  3. Používáte klíčová slova MySQL v dotazu?

  4. MySQL vložit řádek na duplicitní klíč aktualizuje více sloupců