2017-05-02 70 views
1

我有一个表,格式如下:创建水平列

Staff  Client Problems Status 
    1  101  a  1 
    1  101  b  0 
    1  101  e  1 
    2  102  g  0 
    2  102  k  1 

我需要创建基于它的报表和格式波纹管。

Staff  Client Problem1 Status Problem2 Status Problem3 Status..... 
1   101   a  1   b  0  e  1 
2   102   g  0   k  1 

更新:

随着SqlZim的帮助下,我得到如下结果:

Staff  Client  Category Problems Status 
     1  101 Problem1 a  1 
     1  101 Problem2 b  0 
     1  101 Problem3 e  1 
     2  102 Problem1 g  0 
     2  102 Problem2 k  1 

我创建了一个矩阵SSRS报告,并设立类别为列组和客户端的行组和问题作为价值。

我得到了一个错误。

你能帮我吗?谢谢!

+0

宁可让报告处理列,如果你正在使用'rdl'当时只考虑列分组 – Stephen

+0

我想我还需要创建类的名字,如问题1,Problem2, ......但是,我无法得到正确的类别名称。 – Ice

回答

2

在SQL Server:

您可以使用row_number()进行编号行,并连接 '问题'

select 
    Staff 
    , Client 
    , 'Problem'+convert(varchar(10), 
     row_number() over (partition by Staff, Client order by Problems) 
    ) as Category 
    , Problems 
    , Status 
from t 

在SQL Server 2012+可以使用concat()来连接,而不必值显式转换row_number()varchar()

select 
    Staff 
    , Client 
    , concat('Problem', 
     row_number() over (partition by Staff, Client order by Problems) 
    ) as Category 
    , Problems 
    , Status 
from t 

rextester演示:http://rextester.com/ULH84019

回报:

+-------+--------+----------+----------+--------+ 
| Staff | Client | Category | Problems | Status | 
+-------+--------+----------+----------+--------+ 
|  1 | 101 | Problem1 | a  |  1 | 
|  1 | 101 | Problem2 | b  |  0 | 
|  1 | 101 | Problem3 | e  |  1 | 
|  2 | 102 | Problem1 | g  |  0 | 
|  2 | 102 | Problem2 | k  |  1 | 
+-------+--------+----------+----------+--------+ 
+0

谢谢,SqlZim! – Ice

+0

@Ice乐于帮助! – SqlZim