我有一张名为customer,hobby的桌子.顾客有几个爱好.因此,如果我加入我的桌面客户与桌面爱好,我会得到如下结果:
[CustomerName] [HobbyName]
Harry Tennis
Harry Football
Run Code Online (Sandbox Code Playgroud)
我想要的是看到这样的结果:
[CustomerName] [HobbyName1] [HobbyName2]
Harry Tennis Football
Run Code Online (Sandbox Code Playgroud)
我当前的查询如下所示:
Select tCustomer.name, tHobby.name
from dbo.customer tCustomer
inner join dbo.hobby tHobby on tHobby.customerid = tCustomer.id
Run Code Online (Sandbox Code Playgroud)
您没有提供有关表结构的许多详细信息,但您可以使用PIVOT获取最终结果,但为了使用它,您首先要使用row_number()为每个客户的每个爱好生成一个唯一的序列:
select customer, Hobby1, Hobby2
from
(
Select c.name customer,
h.name hobby,
'Hobby'+
cast(row_number() over(partition by c.id
order by h.name) as varchar(10)) seq
from dbo.customer c
inner join dbo.hobby h
on h.customerid = c.id
) d
pivot
(
max(hobby)
for seq in (hobby1, Hobby2)
) piv;
Run Code Online (Sandbox Code Playgroud)
请参阅SQL Fiddle with Demo.如果您不想使用PIVOT函数,那么您还可以使用CASE表达式和聚合函数:
select customer,
max(case when seq = 1 then hobby end) hobby1,
max(case when seq = 2 then hobby end) hobby2
from
(
Select c.name customer,
h.name hobby,
row_number() over(partition by c.id
order by h.name) seq
from dbo.customer c
inner join dbo.hobby h
on h.customerid = c.id
) d
group by customer;
Run Code Online (Sandbox Code Playgroud)