【发布时间】:2015-10-08 13:35:48
【问题描述】:
请帮我解决这个问题: 您将获得一个包含两列的表格: 列是以下之一:
Doctor
Professor
Singer
Actor
写一个查询输出对应occ下面的名字。格式如下:
+--------+-----------+--------+------+
| Doctor | Professor | Singer | Actor|
+--------+-----------+--------+------+
姓名必须按字母顺序排列。
示例输入
Name Occupation
Meera Singer
Ashely Professor
Ketty Professor
Christeen Professor
Jane Actor
Jenny Doctor
Priya Singer
样本输出
Jenny Ashley Meera Jane
Samantha Christeen Priya Julia
NULL Ketty NULL Maria
注意
当没有更多与职业对应的名称时,打印“NULL”。
我尝试使用:
SELECT *
FROM
(
SELECT [Name], [Occupation]
FROM occupations
) AS source
PIVOT
(
max([Name])
FOR [occupation] IN ([Doctor], [Professor], [Singer], [Actor])
) as pvt;
给出以下输出:
Priya Priyanka Kristeen Samantha
如何解决?
【问题讨论】:
-
为什么这是必需的?作为一般原则,使用 SQL 格式化数据以用于显示目的是一种代码气味。这种结构对数据库不友好,通常应该推送到应用程序中的表示层,而不是在数据层中完成。将其移出数据库有助于确保您不会将代码引入角落,您需要在此格式之上开发进一步的 SQL。相反,将数据库的输出保持为关系/规范化的形式,这对于未来更具适应性/可维护性/灵活性。
-
@MatBailie 我也在想同样的事情,但这是一个面试问题。 ¯_(ツ)_/¯
标签: sql sql-server database