我试图消除对数据库进行帖子传递,并且这样做遇到了这个问题。
场景是我需要加入一个每个项目有很多行的表。考虑日期值,项目x在日期y的值为n。在日期x和z处,同一项目也有一行。
我无权改变这张表。
我试图做的事情就是这样:
Select
table1.Name as name,
table1.date as date,
if (date > x)
select table2.value as value,
table2.othervalue as otehrvalue
from table 2
where table1.x = table2.x
from table1
但是我遇到了困难。
我已成功使用字符串运行测试条件,因此如果日期> x显示一个字符串等等,但我似乎无法让选择工作(如果可能的话),我不知道我哪里出错了。我已经在网上看了一下,发现并没有太多让我觉得我可能会咆哮错误的树......
我们正在使用Advantage DB。
任何帮助表示赞赏
编辑为我可以从子查询中返回多个值...
答案 0 :(得分:2)
使用CASE
表达式:
select table1.Name as name,
table1.date as date,
case when date > x then
(select table2.value
from table2
where table1.x = table2.x)
end as value
from table1
当date< = x。
时将返回NULL注意,如果子选择返回多行,您将收到错误!
答案 1 :(得分:2)
您还可以将case...when
与left outer join
:
Select
table1.Name as name,
table1.date as date,
case when table1.date > x
then table2.value
else null
end as value
from table1
left join table2
on table1.x = table2.x;
编辑,回复:有条件地从表2中返回多个列
是的,您应该能够为多个列执行此操作,方法是使用date > x
作为连接条件,并保留左外连接(这将再次为任何失败的连接投影NULL),最后使用COALESCE
将任何NULL恢复为Table1条件:
Select
table1.Name as name,
table1.date as date,
COALESCE(table2.x, table1.x) as x,
COALSECE(table2.y, table1.y) as y
from table1
left join table2
on table1.x = table2.x AND table1.date > x;