SQL从案例中选择,或者如果…那么选择逻辑?

SQL从案例中选择,或者如果…那么选择逻辑?,sql,advantage-database-server,Sql,Advantage Database Server,我试图避免在数据库中进行post传递,这样做会遇到这个问题 这个场景是,我需要连接到一个表中,该表中每个项目有许多行。考虑日期值,项目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 ot

我试图避免在数据库中进行post传递,这样做会遇到这个问题

这个场景是,我需要连接到一个表中,该表中每个项目有许多行。考虑日期值,项目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
但是我遇到了困难。 我已经成功地使用字符串运行了测试条件,因此如果date>x显示一个字符串等等,但是我似乎无法让select正常工作(如果可能的话),并且我不确定哪里出了问题。我在网上查了一下,没找到什么可供参考的东西,这让我觉得我可能找错了方向

我们正在使用Advantage DB

谢谢你的帮助


编辑为我想从子查询返回多个值…

使用
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时将返回NULL您也可以使用
case…when
左外连接时

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;
Edit,Re:有条件地从表2中返回多列

是的,您应该能够对多个列执行此操作,方法是使用
date>x
作为联接条件,并保留左侧外部联接(这将再次为任何失败的联接投影NULL),最后使用
COALESCE
将任何NULL还原回表1条件:

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;

您使用的是MySQL和/或SQL Server吗?(不要给未涉及的产品贴标签。)如果日期不大于x,其他的是什么?@AbhikChakraborty-Hi,日期是一个范围,表中有一个生效日期和一个生效日期。:)谢谢,如果我想返回多个字段,这是否仍然可行?所以选择table2.x、table2.y等。我返回一个错误,说子查询返回多个列,这当然是正确的,但想知道是否有解决方法?如果您想要两个(或更多)列,您可以进行连接,就像StuartLC的回答一样。如果子查询中有多行,可以执行联接解决方案,也可以限制子查询。(fetch max或fetch limit等),这取决于您想要的结果。谢谢,如果我想返回多个字段,这仍然可行吗?所以选择table2.x、table2.y等等。我返回一个错误,说子查询返回多个列,这当然是正确的,但想知道是否有解决方法?是的,我相信您可以按照我的编辑中概述的那样做。