SSRS多行数据

时间:2013-03-03 17:05:00

标签: sql sql-server-2008

我的SQL Server 2008报告在表格中返回多行。一个简单的select语句返回两列,一列是记录号,另一列是扇区。扇区列可以包含6个不同值中的任何一个。

编辑:扇区列中允许NULL个值。

我希望这些数据在我的表格中的一行。

让我们说1号记录有A区,C区和E区 记录2有B部分和C部分 记录3没有。

我追踪三行数据。我还需要它显示两种方式。一个所有扇区出现在用逗号分隔的同一个单元格中。另一个是每个类别的单独的单元格

Record number  | Sector
1              | A, C, E
2              | B, C
3              | 

或者

Record Number | Sector A | Sector B | Sector C | Sector D | Sector E
1             |  A       |          | C        |          | E
2             |          | B        | C        |          | 
3             |          |          |          |          | 

目前我的报告给了我6行。

Record Number | Sector
1             | A
1             | C
1             | E
2             | B
2             | C
3             | 

有办法解决这个问题吗?

我正在使用查询设计器而不是编写SQL语句。

1 个答案:

答案 0 :(得分:2)

为了使用以逗号分隔的sector值列表获取您想要的第一个结果,您需要使用FOR XML PATHSTUFF。代码将是:

select t1.recordnumber,
  STUFF((SELECT ', ' + t2.sector
         from yourtable t2
         where t1.recordnumber = t2.recordnumber
          FOR XML PATH (''))
          , 1, 1, '')  AS Sector
from yourtable t1
group by t1.recordnumber

SQL Fiddle with Demo。结果是:

| RECORDNUMBER |   SECTOR |
---------------------------
|            1 |  A, C, E |
|            2 |     B, C |
|            3 |   (null) |

然后,要在单行中获取recordNumber的结果,您可以使用PIVOT函数:

select *
from
(
  select recordNumber, sector
  from yourtable
) src
pivot
(
  max(sector)
  for sector in (A, B, C, D, E)
) piv;

SQL Fiddle with Demo。此查询的结果是:

| RECORDNUMBER |      A |      B |      C |      D |      E |
-------------------------------------------------------------
|            1 |      A | (null) |      C | (null) |      E |
|            2 | (null) |      B |      C | (null) | (null) |
|            3 | (null) | (null) | (null) | (null) | (null) |