gpt4 book ai didi

SQL Server CASE 语句对表达式求值一次

转载 作者:行者123 更新时间:2023-12-03 03:12:06 25 4
gpt4 key购买 nike

我可能遗漏了一些明显的东西!预先感谢您的帮助。

我正在尝试在内联 SQL 语句中使用 CASE 语句。我只想对表达式求值一次,因此我希望将表达式放在 CASE 部分中,然后在每个 WHEN 中求结果。这是示例:

    SELECT
MyTable.ColumnA,
CASE DateDiff(d, MyTable.MyDate, getDate())
WHEN <= 0 THEN 'bad'
WHEN BETWEEN 1 AND 15 THEN 'reasonable'
ELSE 'good'
END as MyCalculatedColumn,
MyTable.SomeOtherColumn

我知道我能做到:

 CASE 
WHEN DateDiff(d, MyTable.MyDate, getDate()) <= 0 THEN 'bad'
WHEN DateDiff(d, MyTable.MyDate, getDate()) BETWEEN 1 AND 15 THEN 'reasonable'
ELSE 'good'
END

但是在我的第一个例子中,SQL 似乎不喜欢这个语句:

WHEN <= 0 THEN 'bad'

请注意,该语句与其他 SQL 内联,因此我无法执行以下操作:

DECLARE @DaysDiff bigint
SET @DaysDiff = DateDiff(d, MyTable.MyDate, getDate())

CASE @DaysDiff
WHEN <= 0 THEN 'bad'
WHEN BETWEEN 1 AND 15 THEN 'reasonable'
ELSE 'good'
END

我的实际 DateDiff 表达式要复杂得多,我只想维护其逻辑,并仅对其进行一次评估。

再次感谢...

最佳答案

您可以使用apply来实现此目的:

 SELECT MyTable.ColumnA, 
(CASE WHEN day_diff <= 0 THEN 'bad'
WHEN BETWEEN 1 AND 15 THEN 'reasonable'
ELSE 'good'
END) as MyCalculatedColumn,
MyTable.SomeOtherColumn
FROM MyTable CROSS APPLY
(VALUES (DateDiff(day, MyTable.MyDate, getDate()))) v(day_diff)

APPLY 是将计算值添加到语句中的一种非常方便的方法。由于它们是在 FROM 子句中定义的,因此可以在 SELECTWHEREGROUP BY 子句中使用其中列别名将无法被识别。

关于SQL Server CASE 语句对表达式求值一次,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57500641/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com