我需要制作通用数据库。它应该看起来像下面的例子。
http://s11.postimage.org/4n6sigf37/Untitled_picture.png
我需要一些动态存储过程或查询。
这是一种存储在我的 sql 中的 wordpress 帖子。
我需要使用 SQL Server。
我需要制作通用数据库。它应该看起来像下面的例子。
http://s11.postimage.org/4n6sigf37/Untitled_picture.png
我需要一些动态存储过程或查询。
这是一种存储在我的 sql 中的 wordpress 帖子。
我需要使用 SQL Server。
基本上,您正在尝试在PIVOT
其中获取列中的值key
并将每个值转换为自己的列的数据。如果您知道要转换的值,则可以通过 static 对它们进行硬编码PIVOT
,类似于:
select id, name, email, password, state, city
from
(
select u.id,
u.name,
u.email,
u.password,
m.[key],
m.value
from users u
left join usermeta m
on u.id = m.user_id
) x
pivot
(
max(value)
for [key] in ([State], [City])
) p;
但是你说你有一个未知数量的列,所以你会想要使用一个动态的PIVOT
:
DECLARE @cols AS NVARCHAR(MAX),
@query AS NVARCHAR(MAX)
select @cols = STUFF((SELECT distinct ',' + QUOTENAME([key])
from usermeta
FOR XML PATH(''), TYPE
).value('.', 'NVARCHAR(MAX)')
,1,1,'')
set @query = 'SELECT id, name, email, password, ' + @cols + ' from
(
select u.id,
u.name,
u.email,
u.password,
m.[key],
m.value
from users u
left join usermeta m
on u.id = m.user_id
) x
pivot
(
max(value)
for [key] in (' + @cols + ')
) p '
execute(@query)
这应该有效:
SELECT a.ID, a.Name, a.Email, a.Password
(SELECT Value FROM UserMeta WHERE Key = 'State' AND User_Id = a.ID) AS State,
(SELECT Value FROM UserMeta WHERE Key = 'City' AND User_Id = a.ID) AS City
FROM User a