2014-02-21 43 views
-1

我有一些数据,看起来像这样SSRS排序列

ID |Name | Label1| Data1 |L2 |D2 |L3 | D3| 
AAAA | C | X  | 2  | Y | 4 | | | 
BBBB | D | Y  | 5  | Z | 6 | | | 
CCCC | E | X  | 3  | Y | 6 | Z | 9 | 
DDDD | F | Z  | 5  | X | 6 | Y | 3 | 

,我需要像这样显示它在一份报告:

ID |Name | X | Y | Z | 
AAAA | C | 2 | 4 | 0 | 
BBBB | D | 0 | 5 | 6 | 
CCCC | E | 3 | 6 | 9 | 
DDDD | F | 6 | 3 | 5 | 

我如何去这样做呢?

+0

我真的不知道我理解你的数据是如何构成的。您是否尝试过在标签列上使用列组? – mmarie

+0

我不确定如何使用列组。 – user3992

+0

http://technet.microsoft.com/en-us/library/dd207149.aspx – mmarie

回答

0

你可以在SQL透视数据:

-- load test data 
declare @YourTable table(ID char(4),Name char(1),L1 char(1),D1 int,L2 char(1),D2 int,L3 char(1),D3 int) 
insert into @YourTable values 
    ('AAAA','C','X',2,'Y',4,null,null), 
    ('BBBB','D','Y',5,'Z',6,null,null), 
    ('CCCC','E','X',3,'Y',6,'Z',9), 
    ('DDDD','F','Z',5,'X',6,'Y',3) 

-- return pivoted data 
select 
    ID, 
    Name, 
    isnull([X],0) [X], 
    isnull([Y],0) [Y], 
    isnull([Z],0) [Z] 
from (
     select 
      yt.ID, 
      yt.Name, 
      ld.Label, 
      ld.Data 
     from @YourTable yt 
      cross apply (
         select L1 Label,D1 Data union all 
         select L2 Label,D2 Data union all 
         select L3 Label,D3 Data 
         ) ld 
     ) t 
    pivot (
      max(Data) 
      for Label in([X],[Y],[Z]) 
      ) p 
+0

可能工作。我试图找到一个比旋转表3次和联合然后组更有效的方法。 – user3992

+0

顺便说一句,有没有办法从所有3列中选择所有不同的标签名称去与它?因为它可能是字母表中的所有字母。 – user3992

+0

除此之外,它完美的作品!感谢你的回答 :) – user3992