[英]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.