簡體   English   中英

來自select sql的動態列名

[英]Dynamically column names from select sql

我的數據庫有以下數據輸出

Observation             1   aug -2015
Improvement suggestion  1   dec -2015
Observation             1   dec -2015
Accident                2   jan -2016
Non Conformity          5   jan -2016
Observation             5   jan -2016

我試圖弄清楚如何使用 PIVOT-table 來完成這項工作,但無法使其工作。 日期是動態的,取決於數據庫中的日期。 我正在尋找的輸出如下所示。 有人可以指出我正確的方向嗎?

看看我到目前為止嘗試過的小提琴,我知道它現在正在使用 SUM,這是不正確的,但我不知道要使用什么。 http://sqlfiddle.com/#!3/0bd0c/4

需要輸出

PS。 數據和圖像無關,所以不要被圖像所迷惑。 這只是一個例子

這是你要找的東西:

DECLARE @cols AS NVARCHAR(MAX),
@query  AS NVARCHAR(MAX)

select @cols = STUFF((SELECT DISTINCT ',' + QUOTENAME(ColumnName) 
    from tempData
    group by ColumnName, name
FOR XML PATH(''), Type
).value('.', 'NVARCHAR(MAX)') 
,1,1,'')

set @query = N'SELECT Name, ' + @cols + N' from 
 (
    select Name, value, ColumnName
    from tempData
) x
pivot 
(
    SUM(value)
    for ColumnName in (' + @cols + N')
) p '

exec sp_executesql @query;

在您的小提琴中更改它會根據需要返回行。

試試這樣:

DECLARE @cols AS NVARCHAR(MAX)=
STUFF(
(
    SELECT DISTINCT ',[' + ColumnName + ']'
    FROM tempData
    FOR XML PATH('')
)
,1,1,'');

DECLARE @SqlCmd VARCHAR(MAX)=
'SELECT p.*
 FROM
 (
    SELECT *
    FROM tempData
 ) AS tbl
 PIVOT
 (
    SUM(Value) FOR ColumnName IN(' +  @cols +')
 ) AS p';

 EXEC(@SqlCmd);

暫無
暫無

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

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