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' 是赛季名称。
有什么理由不只是使用 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)