當我使用 CASE 陳述句時
示例 -在此表中
我想在下面運行這個查詢
SELECT
*,
CASE
WHEN productA IS NOT NULL
THEN productA * 10
END AS newAcolumn,
CASE
WHEN productB IS NOT NULL
THEN productB * 5
END AS newBcolumn
FROM
table1
我想對新列執行進一步的聚合函式和計算。例子
(newAcolumn / newBcolumn) as calc
我怎樣才能做到這一點?我會完全創建一個新表嗎?
uj5u.com熱心網友回復:
如果您想避免重復語法,您有幾個選擇。可能還有更多。以下是我的建議。
您可以將查詢結果存盤在臨時表中,然后對該臨時表進行查詢。
SELECT
*,
CASE WHEN productA is not null
THEN
productA*10
END as newAcolumn,
CASE WHEN productB is not null
THEN productB*5
END as newBcolumn
-- Look here! Creating a temp table on the fly.
INTO
#tt
from table1;
-- Temp table exists now.
-- Query at will!
SELECT newBColumn / newAColumn FROM #tt;
您也可以使用 CTE,這將達到相同的目的。
WITH tt AS
(
SELECT
*,
CASE WHEN productA is not null
THEN
productA*10
END as newAcolumn,
CASE WHEN productB is not null
THEN productB*5
END as newBcolumn
from
table1
)
-- a CTE called tt has just been created and can
-- be queried like a table
SELECT newAColumn / newBColumn FROM tt;
您使用哪一種取決于您的需要。如果要對變化不大的資料執行重復查詢,請使用臨時表。
如果您需要絕對最新的資料并且不介意每次都按順序進行查詢,請使用 CTE。
uj5u.com熱心網友回復:
我會為此推薦一個CTE:
with cte as
(
select
case
when productA is not null then productA * 10
else 0
end newAColumn
, case
when productB is not null then productB * 5
else 0
end newBColumn
from table1
)
select (newAcolumn\newBcolumn) as calc
--, sum(newAColumn) --aggregate examples
--, avg(newAColumn) --aggregate examples
from cte
else如果您case希望將它們包含在類似AVG.
如果您保持原樣,帶有productAof 的行將給出與 a ofnull不同的平均值。productA0
uj5u.com熱心網友回復:
您可以將其包裝在子查詢中
SELECT *
, newAcolumn/newBcolumn AS newCcolumn
FROM
(
SELECT *,
CASE
WHEN productA is not null THEN productA*10
END as newAcolumn,
CASE
WHEN productB is not null THEN productB*5
END as newBcolumn
FROM table1
) Q;
或者使用 CTE,它就像子查詢的可重用模板。
WITH CTE AS (
SELECT *,
CASE
WHEN productA is not null THEN productA*10
END as newAcolumn,
CASE
WHEN productB is not null THEN productB*5
END as newBcolumn
FROM table1
)
SELECT *
, newAcolumn/newBcolumn AS newCcolumn
FROM CTE
或使用外部/交叉應用
SELECT t.*
, a.newAcolumn
, a.newBcolumn
, a.newAcolumn/a.newBcolumn AS newCcolumn
FROM table1 t
OUTER APPLY (
SELECT
CASE
WHEN productA is not null THEN productA*10
END as newAcolumn,
CASE
WHEN productB is not null THEN productB*5
END as newBcolumn
) a
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/421777.html
標籤:
上一篇:如何獲取每個日期中存在的值?
下一篇:如何根據變數復制值
