【发布时间】:2020-06-22 13:31:46
【问题描述】:
我坚持在一个简单的例子中使用PIVOT(我将在下面完整给出)。完全披露,我从https://www.hackerrank.com/ 得到这个。我之所以选择它,正是因为我想更熟悉PIVOT,这看起来像是一个简单的例子!我看过很多关于这个主题的帖子,并且一直在用这个来抄袭:https://social.msdn.microsoft.com/Forums/sqlserver/en-US/b76a4668-d0c3-4c51-8d86-117d5c181e69/pivot-without-aggregate-function?forum=transactsql,但似乎无法把事情搞定。这是表格:
TABLE OCCUPATIONS
Name Occupation
Samantha Doctor
Julia Actor
Maria Actor
Meera Singer
Ashley Professor
Ketty Professor
Christeen Professor
Jane Actor
Jenny Doctor
Priya Singer
任务是使输出具有Doctor、Professor、Singer 或Actor 列(按此顺序)。如果您用完一列或多列的数据,请输入NULL。这是预期的输出(直接从网站复制)。
Jenny Ashley Meera Jane
Samantha Christeen Priya Julia
NULL Ketty NULL Maria
顺便说一句,他们似乎想要没有列标题的结果(我不确定!)。
这是我尝试过的最新版本:
SELECT [Doctor], [Professor],[Singer], [Actor]
FROM
(SELECT [Name], [Occupation] from OCCUPATIONS) as pvtsource
PIVOT
( MAX([Name]) FOR [Occupation] IN ([Doctor], [Professor],[Singer], [Actor]) ) AS p
它产生:
Doctor Professor Singer Actor
Samantha Ketty Priya Maria
我对这个不正确的结果并不感到惊讶。毕竟,我在查询中确实说过MAX。我假设它只是根据字母排序为每个职业选择MAX 名称。例如,如果您基于字母表,玛丽亚是比 Julia 或 Jane 更“大”的演员。但是当我删除MAX 时,我收到一个错误(“语法不正确...”)。如何做到这一点?
谢谢!
奖金问题
1.好,温柔,文章给PIVOT?我显然还没有通过我的厚脑袋得到它。最终,我确实希望能够在我 SUM 或 MAX 的地方进行更复杂的旋转。
2.如何显示没有列标题的结果?
3. 如果有简单的方法,我也有兴趣在没有PIVOT 的情况下如何做到这一点。
【问题讨论】:
-
透视是一种聚合形式。
-
这能回答你的问题吗? TSQL Pivot without aggregate function。就个人而言,我建议使用条件聚合/“Cross-tab”answer。
-
@Larnu。我以前看过那个链接。要么它没有回答我的问题,要么我太密集而看不到它。接受的答案谈到使用“MAX”,正如我提到的,我在使用 MAX(或 MIN)时得到了错误的结果。
标签: sql-server tsql pivot pivot-table