我有一个如下查询:
SELECT A.a, A.b, B.c,
(CASE WHEN ... THEN ... ELSE ... END) AS CalculatedValue,
B.d
FROM dbo.TableA A INNER JOIN
dbo.TableB B ON (...)
WHERE (CASE WHEN ... THEN ... ELSE ... END) BETWEEN @DayStart AND @DayEnd
GROUP BY A.a, (CASE WHEN ... THEN ... ELSE ... END), B.c
避免多次重复完全相同的表达式:(CASE WHEN ... THEN ... ELSE ... END)
我想定义一个 CTE 并在 select、where 和 group by 表达式中使用查询这样的表CalculatedValue
不幸的是,这不起作用,因为选择需要已经包含group by
创建时CTE
有没有其他方法可以用来不重复CASE WHEN...
很多次?
Use CROSS APPLY http://technet.microsoft.com/en-us/library/ms175156.aspx,可用于定义别名字段,然后引用它们:
SELECT A.a,
A.b,
B.c,
CalculatedValue,
B.d
FROM
dbo.TableA A
INNER JOIN
dbo.TableB B
ON (...)
CROSS APPLY
(SELECT (CASE WHEN ... THEN ... ELSE ... END)) CxA(CalculatedValue)
WHERE CalculatedValue BETWEEN @DayStart AND @DayEnd
GROUP BY A.a, CalculatedValue, B.c
The CxA
只是一个别名,您可以随意命名。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)