Sql server 根据所需的数据优先级,仅选择一条(非顶部)记录
我有一个子查询,它是大型查询的一部分,但实际上我认为这个问题与子查询无关。但是,如果我错了,我会很高兴地发布整个内容 我有一个人可能有4个或5个或8个或0个等条目的记录。我们只想要一张唱片,但我们有一个偏好。如果A记录不存在,我们将使用B记录等 最初我是加入到桌子上的 ……剪断Sql server 根据所需的数据优先级,仅选择一条(非顶部)记录,sql-server,tsql,Sql Server,Tsql,我有一个子查询,它是大型查询的一部分,但实际上我认为这个问题与子查询无关。但是,如果我错了,我会很高兴地发布整个内容 我有一个人可能有4个或5个或8个或0个等条目的记录。我们只想要一张唱片,但我们有一个偏好。如果A记录不存在,我们将使用B记录等 最初我是加入到桌子上的 ……剪断 LEFT JOIN [COMMUNICATION] Comm ON Peeps.PEOPLE_ID = Comm.PEOPLE_ID 并取得如下成果: ID FIRST LAST A
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上读过,对他们很熟悉,但在这种情况下,我需要能够加入,不知道你会怎么做。让cte按照所需的业务优先级和2对记录进行排序。如何加入它
如果你能给我指出正确的方向或告诉我该学什么,我会很乐意做我自己的工作
谢谢没有进一步的信息,我想说的是:
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
为什么同一个人有5排?您需要显示完整的查询。