2014-09-04 49 views
0

我有一個子查詢是一個大型查詢的一部分,但真的我認爲這個問題是孤立的子查詢。如果我錯了,我會很樂意發佈整個事情。根據期望的數據優先級只選擇一個(NOT TOP)記錄庫

我有一個人可能有4或5或8或0等條目的記錄。我們只需要一條記錄,但我們有一個偏好。我們會記錄B,如果記錄中的一個不存在等

本來我是加入到表

.....剪斷.....

LEFT JOIN [COMMUNICATION] Comm ON Peeps.PEOPLE_ID = Comm.PEOPLE_ID 

和獲得結果如

ID  FIRST  LAST  ADDY  BIZ  CELL  FAX   HOME 
21930 Person  Name  Addy 3237532500 NULL  NULL  NULL 
21930 Person  Name  Addy NULL  3237910815 NULL  NULL 
21930 Person  Name  Addy NULL  NULL  3235869055 NULL 
21930 Person  Name  Addy NULL  NULL  NULL  3238660704 
21930 Person  Name  Addy NULL  NULL  NULL  NULL 

在通訊表中我確實有5條記錄,所以它不是連接問題。

現在我想在這首隻有一排.... 首頁 細胞 商務 傳真

所以我的第一次嘗試做TOP子查詢(1),但當然,只有返回桌子的第一排。我讀過cte並且熟悉它們,但在這種情況下,我需要能夠加入並不確定如何1.請讓cte按期望的業務優先級排序記錄,以及2.如何加入記錄。

如果你能指出我的鼻子朝着正確的方向或告訴我要學什麼,我會很樂意做我自己的工作。

感謝

+0

爲什麼你有5行爲同一人?您需要顯示完整的查詢。 – Donal 2014-09-04 23:37:31

回答

0

沒有進一步的信息,這是我走過來:

create table #temp_table (
    [id] int, 
    [first] varchar(50), 
    [last] varchar(50), 
    [addy] varchar(50), 
    [biz] varchar(50) null, 
    [cell] varchar(50) null, 
    [fax] varchar(50) null, 
    [home] varchar(50) null 
) 

insert into #temp_table 
select 21930, 'Person', 'Name', 'Addy', '3237532500', null, null, null union all 
select 21930, 'Person', 'Name', 'Addy', null, '3237910815', null, null union all 
select 21930, 'Person', 'Name', 'Addy', null, null, '3235869055', null union all 
select 21930, 'Person', 'Name', 'Addy', null, null, null, '3238660704' union all 
select 21930, 'Person', 'Name', 'Addy', null, null, null, null 


;with ordered as(
    select 
     *, 
     rn = row_number() over(partition by id 
           order by 
            case 
             when home is not null then 1 
             when cell is not null then 2 
             when biz is not null then 3 
             when fax is not null then 4 
             else 9999 
            end 
           ) 
    from #temp_table 
) 
select 
    [id], 
    [first], 
    [last], 
    [addy], 
    [biz], 
    [cell], 
    [fax], 
    [home] 
from ordered 
where 
    rn = 1 

drop table #temp_table 
相關問題