如何将不同的值合并到带编号的列组中

How to consolidate different values into numbered column groups

提问人:Jonathon Quinn 提问时间:10/17/2023 最后编辑:Thom AJonathon Quinn 更新时间:10/17/2023 访问量:28

问:

如果我有一个简单的数据集,如下所示:

名字 主题 年级
乔·博格斯 英语 一个
乔·博格斯 数学 B
山姆·史密斯 英语 B
山姆·史密斯 物理 C

有没有办法创建列分组,以便数据显示如下:

名字 主题 1 1年级 主题 2 2年级
乔·博格斯 英语 一个 数学 B
山姆·史密斯 英语 B 物理 C

任何建议将不胜感激!

我已经尝试了嵌套表等各种方法,但您不能在过滤器中使用聚合函数这一事实破坏了这种方法。

sql-server 报告服务

评论

0赞 Thom A 10/17/2023
请改用矩阵。您只需要向数据添加某种行号,以便为列分组提供值。
0赞 Jonathon Quinn 10/17/2023
@ThomA 感谢您的快速回复 - 我希望有一种简洁的方法可以纯粹在报告端完成,但看起来我需要在查询中进行计数。

答:

0赞 Alan Schofield 10/17/2023 #1

正如 Thom A 所建议的,您需要添加一列来处理行组,但这已经足够简单了。

在这里,我创建了一些示例数据并添加了一个额外的行,以便您可以在名称之间的主题数量不同时看到它的工作。

DECLARE @t TABLE (Name varchar(20), Subject varchar(20), Grade varchar(20))
INSERT INTO @T VALUES 
('Joe Bloggs', 'English', 'A'),
('Joe Bloggs', 'Maths', 'B'),
('Sam Smith', 'English', 'B'),
('Sam Smith', 'Physics', 'C'),
('Sam Smith', 'T-SQL', 'C')


SELECT 
    *
    , ROW_NUMBER() OVER(PARTITION BY [Name] ORDER BY Subject) AS ColN
    FROM @t

这给了我们以下结果

enter image description here

在报表中,添加一个矩阵,然后放入“行”占位符和列占位符中。NameColN

右键单击列标题 () 并执行“在组内插入列 Right”。现在,只需将主题和成绩字段拖放到两列中即可。[ColN]

您可以优化列标题,但我只是将其保留在这里。这是结果。

enter image description here

评论

0赞 Jonathon Quinn 10/19/2023
谢谢 Alan,这真的很有帮助 - 不幸的是,SSRS 不允许你在其 SQL 查询中使用某些东西(例如 OVER)。我想我可以创建一个视图,然后改用它,尽管 SSRS 没有提供在报表设计方面处理此问题的方法,但令人沮丧。
0赞 Alan Schofield 10/19/2023
那不是真的。您可以将任何您喜欢的内容放入数据集查询中。我有时有 100 多行长的整个脚本。设计器无法处理这个问题,但如果只需双击数据集名称并选择文本作为查询类型,就可以做你喜欢的事情。我从不使用查询设计器,因为我发现它会创建不容易阅读的可怕代码。
0赞 Alan Schofield 10/19/2023
哦,如果这确实解决了您的问题,请将问题标记为已接受(投票向上/向下按钮下方左侧的复选标记)。这有助于其他用户在寻找类似内容时找到已回答的问题。
0赞 Jonathon Quinn 10/19/2023
我是个白痴!我已经养成了使用设计器的习惯,从来没有想过只在文本视图中尝试它!这是一种享受,并为我节省了大量不需要的 sql 视图。谢谢艾伦。
0赞 Alan Schofield 10/20/2023
很高兴它对你有用。我是威世智和设计师的狂热回避者,:)