sql - 带有和不带子查询的数据透视表
问题描述
我是 SQL Server 新手,在 Hacker Rank 的帮助下学习东西
问题 - https://www.hackerrank.com/challenges/occupations/problem
查询(有了这个我们得到所有的行) -
SELECT
[Doctor], [Professor], [Singer], [Actor]
FROM
(
SELECT ROW_NUMBER() OVER (PARTITION BY OCCUPATION ORDER BY NAME) [RowNumber], * FROM OCCUPATIONS
) AS tempTable
PIVOT
(
MAX(NAME) FOR OCCUPATION IN ([Doctor], [Professor], [Singer], [Actor])
) AS pivotTable
没有子查询(我们只得到一行,因为 min 或 max 从每个职业中取一行)-
SELECT [Doctor], [Professor], [Singer], [Actor]
FROM occupations as t
PIVOT
(
max(name)
FOR occupation IN ([Doctor], [Professor], [Singer], [Actor])
) AS P
那么,两个查询有什么区别呢?有什么SELECT ROW_NUMBER() OVER (PARTITION BY OCCUPATION ORDER BY NAME) [RowNumber], * FROM OCCUPATIONS
不同?
解决方案
您只有名称和职业列 - 如果您按职业进行透视并聚合名称,则只会返回一行。通过添加 row_number,聚合不会将输出减少到单行,因为每一行都有不同的 row_number。
推荐阅读
- mysql - 如何对共享相同值的行组中某些值的出现进行求和和计数
- c++ - 从自定义插件中配置 gradle cpp 插件
- python - 如何在Python中的一行使用中将f字符串与b字符串合并
- c# - 请求的 URL:/User/User/AddCustomer 在单击编辑按钮和列表按钮后,我得到两个控制器名称
- scala - Scala隐式转换冲突奇怪
- svn - 无法在 AiX 7.2 机器上使用已编译的二进制文件(版本 1.10.2)创建 Subversion 存储库
- javacard - Java Card 通过可共享接口访问对象
- sql - 如何将授予角色的授予者授予用户?
- c - 如何在 C 程序中正确重新分配和释放?
- clojure - 如何将嵌套向量置于顶层