gpt4 book ai didi

sql - 在 where 子句中使用 case 语句创建查询

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

我有一个大型存储过程,可以为报告提取数据。我试图根据特定条件在 WHERE 子句中使用两个不同值之一。我不知道如何使用 CASE 语句来完成此操作,我一直在 THEN 部分出错。下面是我正在尝试做的,它只是较大存储过程的一小部分。所以我正在寻找的是 dlp(DATETIME)dlc(DATETIME) 更新的地方 我想使用 dlp 来评估 @AgeStart@AgeEnd 参数,如果没有则使用 dlc@AgeStart@AgeEnd 进行评估

@AgeStart INT
@AgeEnd INT

SET @Recovery = (
SELECT SUM(ISNULL(M.Paid1, 0))
FROM Master AS M
WHERE M.Status IN ('xxx','yyy')
AND CASE
WHEN COALESCE(M.dlp, '2000-01-01 00:00:00') >
COALESCE(M.dlc, '2000-01-01 00:00:00')
THEN DATEDIFF(dd,M.Received,M.dlp)
>= @AgeStart AND DATEDIFF(dd,M.Received,M.dlp) <= @AgeEnd
ELSE DATEDIFF(dd, M.dlc, M.Received)
>= @AgeStart AND DATEDIFF(dd, M.dlc, M.Received) <= @AgeEnd
END
AND M.Balance >= @OrigBalanceMin AND M.Balance <= @OrigBalanceMax
)

最佳答案

您不需要 case 语句,您可以将它们嵌套在括号中并使用 OR 条件语句。我我把所有的括号都排好了:

WHERE M.Status IN ('xxx','yyy')
AND
/* Your updated case statement starts here */
(
(
COALESCE(M.dlp, '2000-01-01 00:00:00') >
COALESCE(M.dlc, '2000-01-01 00:00:00') AND
DATEDIFF(dd,M.Received,M.dlp) >= @AgeStart AND
DATEDIFF(dd,M.Received,M.dlp) <= @AgeEnd
) OR (
COALESCE(M.dlp, '2000-01-01 00:00:00') <=
COALESCE(M.dlc, '2000-01-01 00:00:00') AND
DATEDIFF(dd, M.dlc, M.Received) >= @AgeStart AND
DATEDIFF(dd, M.dlc, M.Received) <= @AgeEnd
)
)
/* Your updated case statement ends here */
AND M.Balance >= @OrigBalanceMin AND M.Balance <= @OrigBalanceMax
)

关于sql - 在 where 子句中使用 case 语句创建查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12371249/

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