-1

私のテーブルには現在次のものが含まれています。

blog | id | attribute | value
p    | 1  |  pid      | abc1
p    | 1  |  date     | abc2
p    | 1  |  title    | abc3
p    | 2  |  id       | abc1
p    | 2  |  date     | abc2
p    | 2  |  title    | abc3
p    | 3  |  id       | abc1
p    | 3  |  date     | abc2
p    | 3  |  title    | abc3

これを次のように変更する必要があります。

blog | id | postid | date | title
p    | 1  | abc1   | abc2 | abc3
p    | 2  | abc1   | abc2 | abc3
p    | 3  | abc1   | abc2 | abc3

SQLでこれを行うための最良の方法は何ですか?

4

1 に答える 1

1

使用しているRDBMSを指定していませんが、これはすべてのバージョンで機能します。

select blog,
  id,
  max(case when attribute = 'pid' then value end) postid,
  max(case when attribute = 'date' then value end) date,
  max(case when attribute = 'title' then value end) title
from yourtable
group by blog, id

SQL FiddlewithDemoを参照してください

関数でデータベースを使用している場合PIVOT、クエリは次のようになります。

select blog, id, pid as postid, date, title
from 
(
  select blog, id, attribute, value
  from yourtable
) src
pivot
(
  max(value)
  for attribute in (pid, date, title)
) piv

SQL FiddlewithDemoを参照してください

両方の結果は次のようになります。

| BLOG | ID | POSTID | DATE | TITLE |
-------------------------------------
|    p |  1 |   abc1 | abc2 |  abc3 |
|    p |  2 |   abc1 | abc2 |  abc3 |
|    p |  3 |   abc1 | abc2 |  abc3 |
于 2013-01-04T15:08:49.473 に答える