我误会了很多,再次感谢您的所有帮助。最终,我找到了解决方案,甚至没有涉及如果星期一,然后选择我什至不需要CASE语句。
我要做的是在不同的WHERE语句之间插入一个OR。
我已经说了我的最终代码:
SELECT * FROM
(SELECT
t.pay_date
, t.supp_name
, t.client AS row_client
, t.ip_status
, t.bank_account
, t.remitt_curr AS remitt_curr
, t.remitt_id
, t.apar_id
, t.payment_id
FROM
aipheader t
WHERE
DATEPART(DW, GETDATE()) IN (2,3,4)
AND
t.pay_date BETWEEN '2019-01-01' AND DATEADD(DAY,-4,GETDATE())
OR
DATEPART(DW, GETDATE()) IN (5,6)
AND
t.pay_date BETWEEN '2019-01-01' AND DATEADD(DAY,-2,GETDATE())) x
ORDER BY 1
上面的语句将执行正确的OR块,在我的情况下,它是平日的。
*********下面的旧问题*************
我想在一周的不同日期运行不同的SELECT语句。
我实际上可以使以下代码起作用:
select
case
when DATEPART(DW, GETDATE()) = 4 then
(select 'HELLO' )
ELSE
(select 'GOODBYE')
end
[星期三,上面的代码返回“ HELLO”,每隔一个工作日它将返回“ Goodbye”。到目前为止一切顺利!
只要select语句仅返回一个值,它就可以正常工作,但是我确实想要一个完整的表,如下所示。
这里唯一的区别应该是[* FROM table]部分,并且将其全部打破:
select
case
when DATEPART(DW, GETDATE()) = 4 then
(select * FROM table1)
ELSE
(select * FROM table2)
end
如果我什至不能使以上工作正常进行,那么我将无法在不同的工作日进行不同的选择,因此很难确定。
我试图用()封装事物,并以不同的方式添加一些SELECT,但它不起作用,因此它可能是一些SQL主体。
我收到一个错误提示,如果仅返回一个值,这是可以的:
SqlState 37000本机116 [Microsoft] [ODBC SQL Server驱动程序] [SQL服务器]在以下情况下,只能在选择列表中指定一个表达式子查询未使用EXISTS引入。
感谢所有我现在对它有所了解的答复。
我不想添加一列,我可以创建一个全新的SELECT语句。正如您所指出的,我现在看到我的CASE语句仅添加了一个列。
因此,我的第一个想法可能是更好的方法,实际上是在select语句中修改WHERE子句。
我现在已经尝试过,但是不起作用。
SELECT * FROM aipheader t
WHERE
CASE
WHEN DATEPART(DW, GETDATE()) = 4 THEN
t.pay_date = '2019-10-15'
ELSE
t.pay_date = '2019-10-17'
END
它返回错误:
SqlState 37000本机102 [Microsoft] [ODBC SQL Server驱动程序] [SQL服务器]“ =”附近的语法不正确。
我尝试过更简单的方法:
SELECT * FROM aipheader t
WHERE
t.pay_date BETWEEN DATEADD(DAY,-120,GETDATE()) AND DATEADD(DAY,-5,GETDATE())
以上是一种较简单的形式,但是该形式返回正确的值。但是,有人认为带有CASE子句的人返回有关“ =“-sign。]的错误。
Maybee WHERE语句中的CASE部分无效。
我误会了很多,再次感谢您的所有帮助。我最终为我的案件找到了解决方案,它甚至不涉及IF Monday THEN SELECT之类的东西,我什至不需要CASE -...
编辑后,正确的日期过滤方法如下:
我不完全了解您要实现的目标。当然,您的语句将不起作用,因为select
中的case when
语句返回多个列和行。那是行不通的,因为您的case when
语句将显示一个列
这是您在寻找吗?子查询应返回1行并指定col名称
CASE WHEN
,THEN
只能返回单个值
查询必须返回之前已知的列。如果表table1
和table2
的列不同,则无法编写一个查询,该查询一天返回表1的五列,而表2的另一列则返回九。
但是,只要结果列保持不变,就可以选择加入。这是一个小例子:
不确定我是否真的了解您在这里想要实现的目标。此示例假定您基于日期从不同的表中读取数据,并将返回两个表中的所有行: