具有 3 个表的 PIVOT 和没有数值的 JOIN
PIVOT with 3 tables and JOIN without number values
希望有人能帮助我或指出正确的方向。我更像是 sql 语言的初学者。
我有 3 table 个用户、dataTypes 和 usersData
**users** **dataTypes** **usersData**
id id id
dateCreated name (varchar) idUsers
description (varchar) idDataTypes
我只设法在三个 table 上使用连接,如下所示:
select users.*, usersData.*, dataTypes.* from users left join (usersData inner join dataTypes on usersData.idDataTypes=dataTypes.id) on users.id=usersData.idUsers order by users.id asc, dataTypes.id asc
像这样获取每个用户的所有条目,然后重复多次相同的用户 ID:
**users.id** **usersData.data** **dataTypes.name**
但是我希望每种数据类型都显示为一列,并且每一行都包含所有输入的用户数据。
像这样:
**Name** **Last Name** **Address**
John Smith New York
Tom NULL NULL
在 Internet 上查看,pivot 用于将行值作为列,但 sql 代码表示聚合(总和、最小值、最大值)。不知道这是否是使用 pivot 的正确方法,或者我的 table 可能没有正确组织。
我怀疑您想要条件聚合来调整您的 EAV 模型。思路是:
select u.id,
max(case when dt.name = 'name' then ud.data end) as name,
max(case when dt.name = 'last name' then ud.data end) as name,
max(case when dt.name = 'address' then ud.data end) as address
from users u
left join usersdata ud on u.id = ud.idusers
left join datatypes dt on ud.iddatatypes = dt.id
group by u.id
希望有人能帮助我或指出正确的方向。我更像是 sql 语言的初学者。
我有 3 table 个用户、dataTypes 和 usersData
**users** **dataTypes** **usersData**
id id id
dateCreated name (varchar) idUsers
description (varchar) idDataTypes
我只设法在三个 table 上使用连接,如下所示:
select users.*, usersData.*, dataTypes.* from users left join (usersData inner join dataTypes on usersData.idDataTypes=dataTypes.id) on users.id=usersData.idUsers order by users.id asc, dataTypes.id asc
像这样获取每个用户的所有条目,然后重复多次相同的用户 ID:
**users.id** **usersData.data** **dataTypes.name**
但是我希望每种数据类型都显示为一列,并且每一行都包含所有输入的用户数据。 像这样:
**Name** **Last Name** **Address**
John Smith New York
Tom NULL NULL
在 Internet 上查看,pivot 用于将行值作为列,但 sql 代码表示聚合(总和、最小值、最大值)。不知道这是否是使用 pivot 的正确方法,或者我的 table 可能没有正确组织。
我怀疑您想要条件聚合来调整您的 EAV 模型。思路是:
select u.id,
max(case when dt.name = 'name' then ud.data end) as name,
max(case when dt.name = 'last name' then ud.data end) as name,
max(case when dt.name = 'address' then ud.data end) as address
from users u
left join usersdata ud on u.id = ud.idusers
left join datatypes dt on ud.iddatatypes = dt.id
group by u.id