加入 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 仅针对特定用户和设备类型使用一个设备名称,即使该用户有多个设备类型也是如此。