2014-10-09 52 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作爲鏈接標準根據評論到另一個答案。

相關問題