簡體   English   中英

如何在同一個表的同一列上使用不同的where子句連接SQL語句

[英]How to join SQL statements with different where clause on same column of same table

我在sqlite中有2個語句

第一份聲明:

Select SUM(GrossQty) As GQTY, SUM(NetQty) As NQTY
  From NSales 
  Where IMonth=5 And IYear=2012 And IDay>15

結果:

\n GQty NQty\n  30 25\n

第二個聲明

Select SUM(GrossQty) As GQTY, SUM(NetQty) As NQTY
  From NSales 
  Where IMonth=6 And IYear=2012 And IDay<10

第二個結果:

\n GQty NQty\n  20 15\n

我如何組合這些語句,以便將這些結果添加到一起?

期望的結果:

\n GQty NQty\n  50 40\n

你可以做:

SELECT 
    SUM(a.GQTY) AS GrossQty, 
    SUM(a.NQTY) AS NQTY
FROM
(
    SELECT SUM(GrossQty) AS GQTY, SUM(NetQty) AS NQTY 
    FROM   NSales 
    WHERE  IMonth = 5 AND IYear = 2012 AND IDay > 15

    UNION ALL

    SELECT SUM(GrossQty), SUM(NetQty)
    FROM   NSales
    WHERE  IMonth = 6 AND IYear = 2012 AND IDay < 10
) a

或者:

SELECT 
    a.GQTY + b.GQTY AS GQTY,
    a.NQTY + b.NQTY AS NQTY
FROM
(
    SELECT SUM(GrossQty) AS GQTY, SUM(NetQty) AS NQTY 
    FROM   NSales 
    WHERE  IMonth = 5 AND IYear = 2012 AND IDay > 15
) a
CROSS JOIN
(
    SELECT SUM(GrossQty) AS GQTY, SUM(NetQty) NQTY
    FROM   NSales
    WHERE  IMonth = 6 AND IYear = 2012 AND IDay < 10
) b

或者您可以使用CASE表達式並避免必須發出兩個單獨的子選擇(更難閱讀):

SELECT 
    SUM(
        CASE WHEN (IMonth = 5 AND IYear = 2012 AND IDay > 15) OR
                  (IMonth = 6 AND IYear = 2012 AND IDay < 10) THEN
                  GrossQty
             ELSE 0
        END) AS GQTY, 
    SUM(
        CASE WHEN (IMonth = 5 AND IYear = 2012 AND IDay > 15) OR
                  (IMonth = 6 AND IYear = 2012 AND IDay < 10) THEN
                  NetQty
             ELSE 0
        END) AS NQTY
FROM NSales

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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