提问人:Jonathon Quinn 提问时间:10/17/2023 最后编辑:Thom AJonathon Quinn 更新时间:10/17/2023 访问量:28
如何将不同的值合并到带编号的列组中
How to consolidate different values into numbered column groups
问:
如果我有一个简单的数据集,如下所示:
名字 | 主题 | 年级 |
---|---|---|
乔·博格斯 | 英语 | 一个 |
乔·博格斯 | 数学 | B |
山姆·史密斯 | 英语 | B |
山姆·史密斯 | 物理 | C |
有没有办法创建列分组,以便数据显示如下:
名字 | 主题 1 | 1年级 | 主题 2 | 2年级 |
---|---|---|---|---|
乔·博格斯 | 英语 | 一个 | 数学 | B |
山姆·史密斯 | 英语 | B | 物理 | C |
任何建议将不胜感激!
我已经尝试了嵌套表等各种方法,但您不能在过滤器中使用聚合函数这一事实破坏了这种方法。
答:
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
这给了我们以下结果
在报表中,添加一个矩阵,然后放入“行”占位符和列占位符中。Name
ColN
右键单击列标题 () 并执行“在组内插入列 Right”。现在,只需将主题和成绩字段拖放到两列中即可。[ColN]
您可以优化列标题,但我只是将其保留在这里。这是结果。
评论
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
很高兴它对你有用。我是威世智和设计师的狂热回避者,:)
评论