2014-10-09 53 views
0

选择如何在SQL这样做:SQL - 从如果满足特定条件的表选择,否则从其他

  1. SELECT CLIENT, PAYMENT_CODE FROM PAYMENTS_TABLE
  2. If PAYMENT_CODE = 1, SELECT other data from table_1
  3. Else, SELECT other data from table_2

的我想要的结果是:

 
| Client | Payment Code = 1 | Address from table_1 | Phone from table_1 | ... 

 
| Client | Payment Code 1 | Address from table_2 | Phone from table_2 | ... 

提前感谢!

+4

-1使用您可以找到的每个db标签并且不显示任何努力 – 2014-10-09 15:41:59

+0

您正在使用哪些DBMS?你应该只标记你正在使用的那些。有很多方法可以完成你所要求的内容,但它可以改变基于DBMS的最佳方法。 – 2014-10-09 15:44:53

+0

您使用哪个RDMS? – 2014-10-09 15:46:07

回答

1

你没告诉我们如何TABLE_1和TABLE_2链接到payments_table,但这样的事情应该工作:

select p.client, 
     p.payment_code, 
     case 
      when payment_code = 1 then t1.address 
      else t2.address 
     end as address, 
     case 
      when payment_code = 1 then t1.phone 
      else t2.phone 
     end as phon 
from payments_table p 
    left join table_1 t1 on p.some_column = t1.some_column 
    left join table_2 t2 on p.some_column = t2.come_column 
+0

首先,感谢编辑。 table_1,table_2和payments_table由client_code链接。我试图编辑我的问题来添加这个和db2标签,但我不断收到“您的文章似乎包含未正确格式化的代码”,尽管我只使用伪代码。有小费吗? – 2014-10-09 17:15:29

1

你需要使用UNION,一个SELECT查询从TABLE_1获取详细信息时payment_code = 1和另一SELECT摆脱TABLE_2细节时payment_code不等于1

SELECT CLIENT, PAYMENT_CODE, T1.Address, T1.Phone FROM PAYMENTS_TABLE 
JOIN Table_1 T1 
ON -- your condition 
WHERE PAYMENT_CODE =1 
UNION 
SELECT CLIENT, PAYMENT_CODE, T2.Address, T2.Phone FROM PAYMENTS_TABLE 
JOIN Table_2 T2 
ON -- your condition 
WHERE PAYMENT_CODE <> 1 
2

尽管Rajesh的解决方案是好的,你也可以做使用两个LEFT JOIN的它;

SELECT pt.CLIENT, pt.PAYMENT_CODE, 
     COALESCE(t1.address, t2.address) address, 
     COALESCE(t1.phone, t2.Phone) phone 
FROM PAYMENTS_TABLE pt 
LEFT JOIN Table_1 t1 
    ON pt.client_code = t1.client_code AND pt.PAYMENT_CODE = 1 
LEFT JOIN Table_2 t2 
    ON pt.client_code = t2.client_code AND pt.PAYMENT_CODE <> 1 

编辑:添加client_code作为链接标准根据评论到另一个答案。

相关问题