加入 SQL 桥梁 table
Join the SQL Bridge table
我有以下表格
用户
+--------+------+
| 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
(documentation)
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;
但请注意,这将 return 仅针对特定用户和设备类型使用一个设备名称,即使该用户有多个设备类型也是如此。
我有以下表格
用户
+--------+------+
| 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
(documentation)
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;
但请注意,这将 return 仅针对特定用户和设备类型使用一个设备名称,即使该用户有多个设备类型也是如此。