2013-01-04 62 views
-1

我的表目前包含:SQL表支點

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做到這一點的最好方法是什麼?

+0

您使用的是什麼rdbms? – Taryn

+0

在'attrbute'列你有'pid'和'id'?他們都必須是'pid'嗎? –

+0

@HamletHakobyan我以爲他們是基於用戶提供的結果。我認爲他們都應該是'pid' – Taryn

回答

1

您沒有指定您所使用的RDBMS,但是這將在所有版本:

​​

SQL Fiddle with Demo

如果您使用的是數據庫的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 Fiddle with Demo

兩者的結果將爲:

| BLOG | ID | POSTID | DATE | TITLE | 
------------------------------------- 
| p | 1 | abc1 | abc2 | abc3 | 
| p | 2 | abc1 | abc2 | abc3 | 
| p | 3 | abc1 | abc2 | abc3 | 
+0

乾杯,像夢哈哈! – Yunis

+0

@ user1948914歡迎來到StackOverflow,如果這個答案對你有幫助,那麼一定要通過左邊的複選標記來接受它。這將有助於未來的訪問者,你將獲得它的網站聲譽。 – Taryn

+0

非常感謝您的提示:) – Yunis