【发布时间】:2015-11-23 21:03:46
【问题描述】:
我正在尝试通过在上面的 case 语句中使用声明的变量来动态修改我的 where 子句。如果我缺少一个简单的答案,请原谅我,但我完全是自学的,还有很多东西要学。这是语法示例。我不会打扰语句的整个语法,希望你能理解我想要做什么。
declare @myvar1 double
declare @myvar2 double
SELECT
q1.host_po_nbr,
q1.etd,
CASE
WHEN WEEKDAY(TODAY) = 1 Then 11
WHEN WEEKDAY(TODAY) = 2 Then 12
WHEN WEEKDAY(TODAY) = 3 Then 13
WHEN WEEKDAY(TODAY) = 4 Then 14
WHEN WEEKDAY(TODAY) = 5 Then 15
END @myvar1,
CASE
WHEN WEEKDAY(TODAY) = 1 Then 5
WHEN WEEKDAY(TODAY) = 2 Then 6
WHEN WEEKDAY(TODAY) = 3 Then 7
WHEN WEEKDAY(TODAY) = 4 Then 8
WHEN WEEKDAY(TODAY) = 5 Then 9
END @myvar2,
FROM q1
WHERE q1.etd BETWEEN today - @myvar1 AND today - @myvar2
【问题讨论】:
-
不清楚你想在这里做什么..
-
case 语句毫无意义,只有第一个 =1 有效。其次,你不能使用这样的变量,你可以通过子查询轻松解决这个问题
-
也许您正在尝试设置
@myvar1和@myvar2的值,但您需要在选择查询之前这样做..Set @myvar1 = CASE和Set @myvar2 = CASE然后Select where q1.etd BETWEEN today - @myvar1 AND today - @myvar2跨度> -
我在这里与@JamieD77 在一起,在包含您当前的 sn-p 之前,请尝试用文字表达您想要做的事情。当您遇到问题时,sn-p 通常是错误的,因此很难从中推断出含义。
-
我很抱歉。我全神贯注于把它放在那里,以至于我匆忙打错了。我将尝试按照您在评论中的建议进行解释。到目前为止,我感谢每个人对此的快速反应。谢谢你们。基本上我有一个查询,每天早上都会通过调度系统运行。指定我的 between 语句中的天数的 Where 条件将需要根据运行查询的日期进行调整。如果它在星期一(第 1 天)运行,那么它需要介于 -11 和 -5 之间。如果它在星期二(第 2 天)运行,那么它需要介于 -12 和 -6 之间,依此类推。
标签: sql sql-server tsql case