簡體   English   中英

SQL:將case表達式的值用於下一列

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

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