sql-server - 加入 SQL Bridge 表
问题描述
我有以下表格
用户
+--------+------+
| UserID | Name |
+--------+------+
| User1 | John |
| User2 | Mike |
+--------+------+
设备
+----------+------------+------------+------+
| DeviceID | DeviceName | DeviceType | Good |
+----------+------------+------------+------+
| 1 | Device1 | A | 0 |
| 2 | Device2 | A | 1 |
| 3 | Device7 | B | 0 |
| 4 | Device8 | B | 1 |
| 5 | Device11 | C | 0 |
| 6 | Device12 | C | 1 |
+----------+------------+------------+------+
用户设备
+--------------+--------+----------+
| UserDeviceID | UserID | DeviceID |
+--------------+--------+----------+
| z | User1 | 1 |
| y | User1 | 3 |
| x | User1 | 5 |
| w | User2 | 2 |
| v | User2 | 4 |
| u | User2 | 6 |
+--------------+--------+----------+
我想加入这些表格,如下所示
+----------+-------------+-------------+-------------+
| UserName | DeviceTypeA | DeviceTypeB | DeviceTypeC |
+----------+-------------+-------------+-------------+
| User1 | Device1 | Device7 | Device11 |
| User2 | Device2 | Device8 | Device22 |
+----------+-------------+-------------+-------------+
我尝试了所有类型的连接查询,但不幸的是,我无法获取上述格式的数据。有人可以帮忙吗?
解决方案
您可以使用PIVOT
(文档)执行此操作
SELECT P.[Name], P.A AS DeviceTypeA, P.B AS DeviceTypeB, P.C AS DeviceTypeC
FROM
(
SELECT U.[Name], D.DeviceName, D.DeviceType
FROM [User] U
INNER JOIN DeviceUser DU
ON DU.UserID = U.UserID
INNER JOIN Device D
ON D.DeviceID = DU.DeviceID
) AS X
PIVOT
(
MAX(X.DeviceName)
FOR X.DeviceType IN([A], [B], [C])
) AS P;
但是请注意,即使该用户有更多设备类型的设备,这也只会为某个用户和设备类型返回一个设备名称。
推荐阅读
- angular - 仅在媒体查询的情况下,角度材料菜单单击不起作用
- tensorflow - 如何限制 Tensorflow 的权重张量具有相同的行变量?表示正在更新中,仍然保持不变
- c# - 动态对象的 JSON
- php - 密码验证不起作用
- database - 复制稳定 sortKey 的概念
- java - Java List forEach Lamba 表达式 - 第一个元素并遍历所有元素
- javascript - Chrome JavaScript 控制台中换行符的逻辑
- docker - Docker:来自守护进程超时的错误响应
- java - 打印二维数组 Java
- batch-file - 如何使用命令打开 cmd 一定次数