我的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语句。
答案 0 :(得分:2)
为了使用以逗号分隔的sector
值列表获取您想要的第一个结果,您需要使用FOR XML PATH
和STUFF
。代码将是:
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) |