我有一个子查询,它是大型查询的一部分,但实际上我认为这个问题是与子查询隔离的。如果我错了,我会很乐意发布整件事。
我有记录,其中一个人可能有4或5或8或0等条目。我们只想要一条记录但我们有偏好。如果记录A不存在,我们将记录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.如何加入它。 / p>
如果你能指出正确的方向或告诉我要学习什么,我会乐意做自己的工作。
由于
答案 0 :(得分: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