[英]How do I get data from an alias column
我正在尝试根据别名列进行计算。
SELECT
Aged, NotAged, Aging
FROM
(SELECT
DATEDIFF(DAY, CASE WHEN Stat = 'HOLD' THEN Created ELSE Opened END,
CASE WHEN Stat = 'Closed' THEN Closed ELSE GETDATE() END) AS Aged,
DATEDIFF(DAY, CASE WHEN Aged <= 25 THEN GETDATE() AS NotAged ELSE GETDATE() END) AS Aging
FROM
DM.Claim
INNER JOIN
DM.LDesc ON LDescKey = LDescKey) data
如何根据别名列进行计算以获取NotAged
和Aging
?
预期输出将是 Ageed {1 2 35} NotAged {1 2} Aging {35}
如果没有样本数据和预期结果,很难确定您想要什么(聚合?),但您可以使用CROSS APPLY (VALUES
来创建计算列,您甚至可以通过引用前一个列来链接它们。例如。
SELECT
v1.Aged,
v1.NotAged,
v2.Aging
FROM
DM.Claim AS c
INNER JOIN
DM.LDesc AS ld ON ld.LDescKey = c.LDescKey
CROSS APPLY (VALUES (
DATEDIFF(DAY, CASE WHEN Stat = 'HOLD' THEN Created ELSE Opened END,
CASE WHEN Stat = 'Closed' THEN Closed ELSE GETDATE() END,
CASE WHEN Aged <= 25 THEN GETDATE() END
) ) AS v1(Aged, NotAged)
CROSS APPLY (VALUES (
DATEDIFF(DAY, v1.NotAged ELSE GETDATE() END, v1.Aged)
) ) AS v2(Aging);
Charlieface 建议使用 CROSS APPLY 就可以了。
另一种选择是使用 CTE(公用表表达式),因此计算(和别名)列可以在下游表达式中使用。 这是一个包含一些虚构数据的示例。
with somedata as (
SELECT
*
FROM ( values
('HOLD', '2022-06-01', '2022-06-02', '2022-07-15'),
('HOLD', '2022-07-01', '2022-07-02', '2022-07-15'),
('Closed', '2022-06-01', '2022-06-02', '2022-07-15'),
('Closed', '2022-07-01', '2022-07-02', '2022-07-15')
) vals (Stat, Created, Opened, Closed)
)
,
precalc as (
select
*,
Aged = DATEDIFF(
DAY,
CASE WHEN Stat = 'HOLD' THEN Created ELSE Opened END,
CASE WHEN Stat = 'Closed' THEN Closed ELSE GETDATE() END
)
from somedata
)
SELECT
Aged,
NotAged = case when Aged <25 then Aged end,
Aging = case when Aged >=25 then Aged end,
*
FROM precalc
输出 (20220721)
陈年 | 未老化 | 老化 | 统计 | 已创建 | 打开 | 关闭 | 陈年 |
---|---|---|---|---|---|---|---|
50 | 无效的 | 50 | 抓住 | 44713 | 44714 | 44757 | 50 |
20 | 20 | 无效的 | 抓住 | 44743 | 44744 | 44757 | 20 |
43 | 无效的 | 43 | 关闭 | 44713 | 44714 | 44757 | 43 |
13 | 13 | 无效的 | 关闭 | 44743 | 44744 | 44757 | 13 |
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.