【发布时间】:2018-08-07 20:18:50
【问题描述】:
我正在处理旧数据库,需要开发 SQL 查询以提供给客户。作为一个遗留数据库,它在设计时并没有考虑到这种类型的查询。我已经简化了我需要从中选择的两个表,以使示例更易于理解。我有一张“长桌”,需要让它“宽”。我曾尝试使用PIVOT,但遇到了两个问题:
- 没有什么可聚合的 - 它只是一个简单的矩阵变换。
- 我不知道需要添加多少列,更不用说列标题的实际值了。
我需要一个 SQL 查询,它将为以下给定架构输出如下结果:
| [Id] | [Author] | [PublishedYear] | [Title] |
-------------------------------------------------
| 1 | 'Robert' | '2017' | null |
| 2 | 'Tim' | null | null |
| 3 | null | '2018' | null |
| 4 | null | null | 'Winning' |
SQL 构建示例:
CREATE TABLE [Book] (
[Id] int
);
INSERT INTO [Book] ([Id])
VALUES (1);
INSERT INTO [Book] ([Id])
VALUES (2);
INSERT INTO [Book] ([Id])
VALUES (3);
INSERT INTO [Book] ([Id])
VALUES (4);
CREATE TABLE [BookProperty] (
[Name] VARCHAR(100),
[Value] VARCHAR(100),
[BookId] int
);
INSERT INTO [BookProperty] ([Name], [Value], [bookId])
VALUES ('Author', 'Robert', 1);
INSERT INTO [BookProperty] ([Name], [Value], [bookId])
VALUES ('Author', 'Tim', 2);
INSERT INTO [BookProperty] ([Name], [Value], [bookId])
VALUES ('PublishedYear', '2018', 3);
INSERT INTO [BookProperty] ([Name], [Value], [bookId])
VALUES ('PublishedYear', '2017', 1);
INSERT INTO [BookProperty] ([Name], [Value], [bookId])
VALUES ('Title', 'Winning', 4);
【问题讨论】:
-
您应该标记 db 类型。我猜是 sql server,但它会对您的回复有所帮助。
标签: sql sql-server pivot sql-server-2016