查询帮助:分组无聚合&列数未知

时间:2015-11-03 16:58:53

标签: sql sql-server tsql

更新: 我已经添加了一些说明,更新了最终报告应该如何出现在SSRS&中的图像。修复了我的DDL中的错误。

我需要根据数据集生成SSRS报告。我不知道这种灵活性是否可以通过SSRS实现,但是想与SSRS社区的其他人核实。

我想知道最好的方法。 我有一个数据集以及最终报告应该如何发布。

基本上,每个地点都有一个TrainingLot / Group&一些职位。 每个批次中可以有1个或多个位置,最高可达无穷大,但如果SSRS中无法使用无穷大,那么暂时将其限制为4。

任何人都可以建议最好的方法来获得图片中显示的结果集。注意我在excel中很好地格式化了这个,但是每一行都可以重复这个位置。

感谢所提供的任何帮助。

create table #posts
(
     Location varchar(20)
    ,TrainingLot varchar(20)
    ,TrainingPost varchar(20)
)

insert into #posts(Location,TrainingLot,TrainingPost)
values
('Lisbon', 'A111', 'foreground manager')
,('Lisbon', 'A111', 'aft manager')
,('Lisbon', 'A111', 'foreground surveyor')
,('Lisbon', 'A111', 'gate keeper')
,('Lisbon', 'A112', 'foreground manager')
,('Lisbon', 'A112', 'aft manager')
,('Lisbon', 'A112', 'foreground surveyor')
,('Lisbon', 'A112', 'gate keeper')
,('Dublin', 'B7777', 'cleaner')
,('Dublin', 'B7777', 'cleaner supervisor')
,('Dublin', 'D8876', 'cleaner')
,('New York', 'V8877', 'foreground manager')
,('New York', 'V8877', 'aft manager')
,('New York', 'V8877', 'stock room manager')
,('New York', 'V8877', 'cleaner')
,('New York', 'V8878', 'director of inspections')
,('London', 'A119', 'foreground manager')
,('London', 'A119', 'aft manager')
,('London', 'A119', 'foreground surveyor')
,('London', 'A115', 'gate keeper')
,('London', 'A115', 'Repair person')

enter image description here

1 个答案:

答案 0 :(得分:2)

您可以使用:

WITH cte AS
(
SELECT *, 
 rn = ROW_NUMBER() OVER(PARTITION BY Location,TrainingLot ORDER BY (SELECT 1))
FROM #posts
)
SELECT 
  Location,
  TrainingLot,
  TrainingPost1 = MAX(CASE WHEN rn=1 THEN TrainingPost END),
  TrainingPost2 = MAX(CASE WHEN rn=2 THEN TrainingPost END),
  TrainingPost3 = MAX(CASE WHEN rn=3 THEN TrainingPost END),
  TrainingPost4 = MAX(CASE WHEN rn=4 THEN TrainingPost END)
  -- up to 50
FROM cte
GROUP BY 
 Location,
  TrainingLot
ORDER BY  Location,
  TrainingLot

LiveDemo

注意您提供的示例数据与您想要的报告略有不同。例如:

 ('London', 'C6543', 'Storefront manager')