2016-04-14 35 views
0
if object_id('tempdb.dbo.#ctp', 'u') is not null 
    drop table #ctp ; 
create table #ctp(id int, mastername varchar(16)) ; 
insert into #ctp values(1, 'Big Boy') ; 

if object_id('tempdb.dbo.#client', 'u') is not null 
    drop table #client ; 
create table #client(id int, name varchar(16), type int) ; 
insert into #client values(1, 'ABC', 5) ; 
insert into #client values(2, 'XYZ', 6) ; 

if object_id('tempdb.dbo.#ctpclient', 'u') is not null 
    drop table #ctpclient ; 
create table #ctpclient(id int, ctpfk int, clientfk int) ; 
insert into #ctpclient values(1, 1, 1) ; 
insert into #ctpclient values(2, 1, 2) ; 

select tp.mastername 
     , c.name 
     , c.type 
     , cc.ctpfk 
     , cc.clientfk 
from  #ctp tp 
join  #ctpclient cc 
    on  tp.id = cc.ctpfk 
join  #client c 
    on  c.id = cc.clientfk 
    ; 

akım çıkışıSQL Server - iki satırdan, bir sütun bir satır, iki sütun? aşağıdaki gibi

mastername|name|type 
Big Boy|ABC|5 
Big Boy|XYZ|6 

yerine çıkışının iki sıra ben olmak çıkışını istiyorum:

Bu sahip olduğu göz önüne alındığında yapmak için en uygun yolu nedir
mastername|nameone|nametwo 
Big Boy | ABC | XYZ 

#ctpclient gibi bir çok tabloya çok mu?

+3

[PIVOT] hakkında daha fazla bilgi edinin (https://technet.microsoft.com/en-us/library/ms177410 (v = sql.105) .aspx) –

cevap

0

Her zaman 2 satıra sahip olduğunuz varsayılırsa, bir çapraz bağlama kullanabilirsiniz (koşullu toplama). Böyle bir şeye benziyordu.

with SortedValues as 
(
    select tp.mastername 
     , c.name 
     , ROW_NUMBER() over (partition by mastername order by clientfk) as RowNum 
    from #ctp tp 
    join #ctpclient cc on tp.id = cc.ctpfk 
    join #client c on c.id = cc.clientfk 
) 

select mastername 
    , MAX(case when RowNum = 1 then name end) as NameOne 
    , MAX(case when RowNum = 2 then name end) as NameTwo 
from SortedValues 
group by mastername 

Değişen sayılarınız varsa, yine de yapabilirsiniz, ancak biraz daha karmaşıktır.

+0

Elbette, bu çok basitleştirilmiş bir örnekti. Orada ne çalışır, ancak gruplandırılmaya ihtiyaç duyacağım 20 tane başka karakter sütunları var. Bu konuda alternatif bir teknik var mı? SELECT deyiminde bir tür altkümeyi düşünüyordum ama bunu yapmanın en iyi yolunu gerçekten bilmiyorum ... – tbellmer

+0

Neden ekstra sütunları ve grubu ekleyemiyorsunuz? Hangi yaklaşımı alırsanız kullanın, bir noktada tüm sütun isimlerini yazmanız gerekecek. –