【发布时间】:2017-10-29 14:26:22
【问题描述】:
我有一张桌子 T:
CREATE TABLE T
(
id INT,
type VARCHAR(200),
type_value VARCHAR(10),
value VARCHAR(200)
);
INSERT INTO T VALUES (1, 'RoomColor', 'room1', 'yellow');
INSERT INTO T VALUES (1, 'RoomColor', 'room2', 'red');
INSERT INTO T VALUES (2, 'RoomColor', 'room1', 'blue');
INSERT INTO T VALUES (2, 'RoomColor', 'room1', 'pink');
INSERT INTO T VALUES (3, 'RoomColor', 'room1', 'white');
INSERT INTO T VALUES (3, 'RoomColor', 'room2', 'grey');
INSERT INTO T VALUES (3, 'RoomColor', 'room2', 'brown');
INSERT INTO T VALUES (4, 'RoomColor', 'room3', 'green');
我需要把它转换成:
id BedRoomColor DiningRoomColor
-------------------------------------------
1 yellow red
2 blue pink
3 white grey
4 green null
转型背后的逻辑:
- 如果有两个以上房间 type_value 则丢弃第三个房间 type_value
- 如果有多个房间 type_value(例如 room1,room1 或 room2,room2 或 room1,room2),则为相同的 id然后使用第一个 type_value 创建为 BedRoomColor 和第二个 type_value 创建 DiningRoomColor
- 如果只有 1 个房间类型值 (例如,房间 1 或房间 2 或房间 3),则对应的值( 红色、绿色、黄色等)将为放置在 BedRoomColor 和 DiningRoomColor 将是 null
这几天我一直在为这个逻辑苦苦挣扎。谁能帮帮我。
谢谢
【问题讨论】:
-
谷歌:“SQL Server pivot”。
-
检查过了。但仍然在逻辑部分苦苦挣扎。
标签: sql sql-server