[英]SQL: Using case expression to compare values from column Conditional on Values of Other Column
[英]SQL: Using values from case expression for next column
試着想出一種更有效的方式來編寫我的查詢。 我有一個長期的案例陳述聚合會計GL,我的目標是聚合在三列。
Select
Month, Sum(Value1), Sum (Budget),
Case
When Field1 In (1001, 1002, 1003, 1004) Then 'Hardware Expense'
When Field1 In (2001, 2002, 2003, 2004) Then 'Software Expense'
When Field1 In (3001, 3002, 3003, 3004) Then 'Product Sales'
End As "Aggregation1",
Case
When Field1 In (1001, 1002, 1003, 1004, 2001, 2002, 2003) Then 'Expenses'
When Field1 In (3001, 3002, 3003, 3004) Then 'Sales' End As "Aggregation2"
雖然這有效,但我的實際陳述要長得多。 理想情況下,我將“硬件費用”和“軟件費用”稱為變量。
When Aggregation1 In ('Hardware Expense', 'Software Expense') then 'Expenses'
隨着最終的輸出
Month, Sum(Value1), Sum (Budget), Aggregation1, Aggregation2, Aggregation3
謝謝參觀! -標記
查找表可以在這里提供幫助,但是原樣,您可以使用CROSS APPLY
運算符動態創建命名列,您可以在同一查詢中引用它們。
請注意,稍后在查詢中如何使用新定義的Aggregation1
列。
SELECT
Month, Sum(Value1), Sum (Budget),
A1.Aggregation1,
A2.Aggregation2
FROM
SomeTable
CROSS APPLY
(
SELECT
CASE
WHEN Field1 In (1001, 1002, 1003, 1004) Then 'Hardware Expense'
WHEN Field1 In (2001, 2002, 2003, 2004) Then 'Software Expense'
WHEN Field1 In (3001, 3002, 3003, 3004) Then 'Product Sales'
END AS Aggregation1
) AS A1
CROSS APPLY
(
SELECT
CASE
WHEN Aggregation1 In ('Hardware Expense', 'Software Expense') then 'Expenses'
WHEN Aggregation1 In ('Product Sales') then 'Sales'
END AS Aggregation2
) AS A2
;
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.