2015-06-04 43 views
1

尝试对具有相同值的多行数据透视表结果 我的数据看起来像这样到目前为止。对同一列有多个值的SQL数据透视表

Nbr  Person  Test 

33  Barry.  Prim 
33  Brian  Sup 
33  Burke RT 1st 
33  Ray   Add 
33  Jake  Add 
33  Smith  Add 

我想,这样它看起来像这样来透视:

Nbr Prim Sup  1st  Add Add2  Add3 

33 Barry Brian Burke  Ray Jake  Smith 

这是我到目前为止有一个正常的支点,但它不工作,抓住所有的那些在测试列中具有相同的值

CREATE TABLE #testTbl(nbr int,name varchar(20),test VARCHAR(10)) 
INSERT INTO #testTbl 
SELECT '33','Barry','Prim' 
UNION 
SELECT '33','Brian','Sup' 
UNION 
SELECT '33','Burke','1st' 
UNION 
SELECT '33','Ray','Add' 
UNION 
SELECT '33','jake','Add' 
UNION 
SELECT '33','Smith','Add' 


select * from (
Select * 
from #testTbl 
) as x 
pivot(
max(name) for test in ([prim],[sup],[1st],[add]) 
) 
as pivot1 

任何帮助,非常感谢。如果无法将列输出为Add Add2和Add3,那很好。无论什么作品。

回答

1

您可以通过修改test值利用窗口函数这样做:

select * 
from (Select tt.name, 
      (test + (case when count(*) over (partition by test) = 1 
          then '' 
          else cast(row_number() over (partition by test order by (select null)) as varchar(255)) 
         end)) as test 
     from testTbl tt 
    ) as x 
pivot(
max(name) for test in ([prim], [sup], [1st], [Add1], [Add2], [Add3]) 
) as pivot1 

一个SQL小提琴是here

+0

戈登 - 谢谢!当我在这个解决方案中缩小范围时,你击败了我自己的答案,但是我只是想知道当我不知道到底会有多少Add时,如何做关键点。它可能是Add1 Add2 Add3 .... – Jt2ouan

+0

@ Jt2ouan。 。 。那么你需要一个动态的支点。谷歌“动态数据透视”以及您的数据库名称。 –

+0

Yup也发现了。当我不经常调整时,我总会忘记枢轴技术。 – Jt2ouan