是否可以在 case 语句中组合局部变量?

eag*_*man 3 sql-server t-sql

DECLARE @CalcQuery varchar(340)
SET @CalcQuery = (SELECT
    sum(T0.[LineTotal])
FROM 
    RDR1 T0  
        INNER JOIN ORDR T1 ON T0.[DocEntry] = T1.[DocEntry]
        INNER JOIN [@SES_SSNSBRG] T2 ON T0.[ItemCode] = T2.[U_SES_ItemCode]
        INNER JOIN [@SES_SEASONS] T3 ON T2.[U_SES_SEASON] = T3.[Code]
WHERE
    T3.[Name] = 'Wild Heart SP-1' 
    AND 
    T0.[Project] = 'ATL Market Molina')

SELECT DISTINCT
T0.[Project],
CASE 
   WHEN T0.[Project] = 'ATL Market Molina' 
   THEN @CalcQuery 
   END [Season Total]
FROM
RDR1 T0  
INNER JOIN ORDR T1 ON T0.[DocEntry] = T1.[DocEntry]
INNER JOIN [@SES_SSNSBRG] T2 ON T0.[ItemCode] = T2.[U_SES_ItemCode]
INNER JOIN [@SES_SEASONS] T3 ON T2.[U_SES_SEASON] = T3.[Code]
Run Code Online (Sandbox Code Playgroud)

有没有办法让我在不编写冗余 SQL 和 Case 语句的情况下嵌套50 个项目代码7 个季节。我认为唯一的方法是为项目代码和季节声明变量。唯一的问题是我不确定如何将它们与@CalcQuery 合并。我写出了没有变量的 SQL,它很长。

输出将是特定季节“Wild Heart”和“ATL Market Molina”项目的总和。提出此要求的公司没有提前计划并创建了许多订单标签。T3.[Name] = 'Wild Heart SP-1' 是赛季名称。

Ken*_*her 8

有什么理由不只是使用 group by 吗?

SELECT T0.[Project], T3.[Name] AS [Season],
     sum(T0.[LineTotal]) AS [Season Total]
FROM RDR1 T0  
INNER JOIN ORDR T1 ON T0.[DocEntry] = T1.[DocEntry]
INNER JOIN [@SES_SSNSBRG] T2 ON T0.[ItemCode] = T2.[U_SES_ItemCode]
INNER JOIN [@SES_SEASONS] T3 ON T2.[U_SES_SEASON] = T3.[Code]
GROUP BY T0.[Project], T3.[Season];
Run Code Online (Sandbox Code Playgroud)