汎用データベースを作成する必要があります。以下の例のようになります。
http://s11.postimage.org/4n6sigf37/Untitled_picture.png
動的なストアドプロシージャまたはクエリが必要です。
それは私のSQLに保存されている一種のワードプレスの投稿です。
SQLServerを使用する必要があります。
汎用データベースを作成する必要があります。以下の例のようになります。
http://s11.postimage.org/4n6sigf37/Untitled_picture.png
動的なストアドプロシージャまたはクエリが必要です。
それは私のSQLに保存されている一種のワードプレスの投稿です。
SQLServerを使用する必要があります。
PIVOT
基本的に、列の値を取得し、key
それらのそれぞれを独自の列に変換するデータを実行しようとしています。変換する値がわかっている場合は、次のように、静的に値をハードコーディングできます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;
SQL FiddlewithDemoを参照してください
しかし、列の数が不明であると述べたので、動的を使用する必要があります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)
SQL FiddlewithDemoを参照してください
これは機能するはずです:
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