2013-11-22 62 views
0

我一直在尋找樞軸柱,並會感謝任何幫助。我看到大量的例子來總結關鍵點上的一排,但我有一個不同的場景。我有一個被解析的JSON字段,輸出被放置在視圖中。Specific Pivot Query

ID Name  StringValue 
1 type  user 
1 name  aeolos smith 
1 access admin 
2 type  user 
2 name  ramuh smith 
2 access author 

我想以某種方式樞軸轉動,最終如下。

type  name    access 
user  aeolos smith  admin 
user  ramuh smith  author 

等等,用於任何標識符爲ID的條目。

這可能嗎?

回答

1

您沒有指定您所使用的數據庫,但你的數據庫支持窗口化功能,如row_number()那麼你可以使用聚合函數CASE表達式行號一起得到最終結果:

select 
    max(case when name = 'type' then stringvalue end) type, 
    max(case when name = 'name' then stringvalue end) name, 
    max(case when name = 'access' then stringvalue end) access 
from 
(
    select id, name, stringvalue, 
    row_number() over(partition by name order by id) seq 
    from yourtable 
) d 
group by seq; 

SQL Fiddle with Demo

如果你的數據庫支持旋轉功能,那麼你還是會使用row_number()窗口函數與支點一起得到最終結果:

select type, name, access 
from 
(
    select name nm, stringvalue, 
    row_number() over(partition by name order by id) seq 
    from yourtable 
) d 
pivot 
(
    max(stringvalue) 
    for nm in (type, name, access) 
) piv; 

請參閱SQL Fiddle with Demo

+0

謝謝你,那正是我一直在尋找的。這是SQL Server 2012,對於在我的文章中沒有說明而表示歉意。 – Aeolos