RubenHerman RubenHerman - 1 year ago 72
SQL Question

SQL Combine multiple rows into one with multiple columns

I've got multiple rows in my result from my query:

for example, the table "Address":

Street | Number | City
A1 | A2 | A3
B1 | B2 | B3

What I actually want is:

Address1_Street | Address1_Number | Address1_City | Address2_Street | Address2_Number | Address2_City
A1 | A2 | A3 | B1 | B2 | B3

Anyone who knows how I can achieve this?

I've managed to get to this point now (sorry for using other columns, the one above was an example, but I'll guess you'll get the point):

select distinct
ca1.NameLine1 as Address1_NameLine1,
ca2.NameLine1 as Address2_NameLine1
dbo.Accounts a,
dbo.Addresses ca1,
dbo.Addresses ca2
(a.ID = ca1.AccountID AND a.ID = ca2.AccountID)
AND (a.Name = 'TEST')
AND (ca1.ID <> ca2.ID)

But I'm still getting 2 rows... where Address1 switches with Address2. Anyone who knows how to only get one? Thanks!

Answer Source


select ID,
       max(Name) Name,
       max(case when rn=1 then NameLine1 end) Address1_NameLine1,
       max(case when rn=2 then NameLine1 end) Address1_NameLine2
(select a.ID,
        rank() over (partition by a.ID order by ca.ID) rn
 from dbo.Accounts a 
 join dbo.Addresses ca on a.ID = ca.AccountID
 where a.Name = 'TEST') sq
group by ID
Recommended from our users: Dynamic Network Monitoring from WhatsUp Gold from IPSwitch. Free Download