簡體   English   中英

SQL表中列名的靜態和動態值

[英]Static and Dynamic value to Column Name in SQL table

檢查下表:

--------------------------------
ID    Value    GroupName
--------------------------------
1     10       A
2     12       B
3     19       A
4     5        B
5     9        A
6     12       B
7     17       C
8     21       C
9     8        C
10    15       A
--------------------------------

我想要以下輸出:

-------------------------
A     B      C
-------------------------
10    12     17
19    5      21
9     12     8
15    NULL   NULL
-------------------------

因此, 'GroupName'字段中的所有值將成為一個新列。
有誰知道如何在SQL 2008中做到這一點?

謝謝。

請嘗試使用PIVOT ; 下面給出的示例僅適用於3個靜態值A, B and C

select [A], [B], [C] From(
    select 
        Value, GroupName, 
        ROW_NUMBER() over (partition by GroupName order by GroupName) RN
    From 
        tbl
)up pivot (sum(value) for GroupName in ([A], [B], [C]))x

對於動態值,

DECLARE @pivv NVARCHAR(MAX),@Query NVARCHAR(MAX)

SELECT @pivv=COALESCE(@pivv+',','')+ QUOTENAME(GroupName) 
from tbl group by GroupName

IF ISNULL(@pivv, '')<>''
set @Query=
    'select '+@pivv+' From(
        select 
            Value, GroupName, 
            ROW_NUMBER() over (partition by GroupName order by GroupName) RN
        From 
            tbl
    )up pivot (sum(value) for GroupName in ('+@pivv+'))x'

exec (@Query)

SQL小提琴演示

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM