2013-12-17 113 views
0

這是我的問題:在同一記錄中使用不同列的統一查詢

我有幾個查詢,其中每個查詢檢索我2列。

實施例:

1.-客戶端 - 代希

2.-客戶端 - PATR

3.-客戶端 - 沃茨

。 。 。 。

45.客戶端 - 輪胎

總是以不同的列中檢索客戶端。

用於查詢的結果,如果我做一個工會是這樣的:(當然,與列的他同一個客戶,但型動物值多行)

Client Dahi Patr Orts ......... Tyre 
    1   x 
    1       x 
    2     x       
    3   x 
    3     x   
    3           x 

我想統一查詢和檢索像這樣(每個客戶端一列,統一不同列中的一條記錄):

Client Dahi Patr Orts ......... Tyre 
    1   x    x 
    2     x 
    3   x  x       x 

有些想法?

+0

假設您使用數據透視表構建結果集,您可能只能使用聚合函數max和group by client id來爲每個客戶端獲得1行。如果這不起作用,那麼在達到結果集後,您可以按客戶端使用max和group進行聚合。 – xQbert

回答

1

你想做一個完整的外連接。下面是四個查詢的例子:

select coalesce(q1.client, q2.client, q3.client, q4.client) as client, 
     q1.Dahi, q2.Patr, q3.Orts, q4.Tyre 
from q1 full outer join 
    q2 
    on q2.client = q1.client full outer join 
    q3 
    on q3.client = coalesce(q1.client, q2.client) full outer join 
    q4 
    on q4.client = coalesce(q1.client, q2.client, q3.client); 

一個與full outer join問題是client列可能是NULL對上表/子查詢。這就是爲什麼連接條件需要coalesce()

如果您有客戶端列表,可以簡化該查詢。 。 。或者如果您爲所有子查詢計算一個。下面是一個示例:

select coalesce(q1.client, q2.client, q3.client, q4.client) as client, 
     q1.Dahi, q2.Patr, q3.Orts, q4.Tyre 
from (select client from q1 union 
     select client from q2 union 
     select client from q3 union 
     select client from q4 
    ) driver left outer join 
    q1 
    on q1.client = driver.client left outer join 
    q2 
    on q2.client = driver.client left outer join 
    q3 
    on q3.client = driver.client left outer join 
    q4 
    on q4.client = driver.client; 

子查詢獲取所有客戶端的列表(如果它位於單獨的表中,則更好)。隨後的left outer join s一次帶一張表。

相關問題