0

汎用データベースを作成する必要があります。以下の例のようになります。

http://s11.postimage.org/4n6sigf37/Untitled_picture.png

動的なストアドプロシージャまたはクエリが必要です。

それは私のSQLに保存されている一種のワードプレスの投稿です。

SQLServerを使用する必要があります。

4

2 に答える 2

2

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を参照してください

于 2012-10-04T01:31:29.543 に答える
0

これは機能するはずです:

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
于 2012-10-04T00:11:28.923 に答える