【问题标题】:Dynamic Pivot Query动态透视查询
【发布时间】:2012-06-27 19:18:11
【问题描述】:

以下查询执行良好...

select LIC,PF from (select * from tbl_DeductionHead )up
pivot(sum(DeductionPerAmount) for DeductionHead In (LIC,PF)) as pvt

输出看起来像,

LIC PF
900.00 NULL 
NULL 600.00

但我的疑问是如何获得列的动态字段值..

也就是说,

select * from (select * from tbl_DeductionHead )up
pivot(sum(DeductionPerAmount) for DeductionHead In (*)) as pvt

如何使用上述查询

【问题讨论】:

  • 你不能。值列表是静态的
  • @Gaurav 有任何反馈吗?我的回答有帮助吗?
  • @tombom 你确定你的答案很好,而且效果很好......谢谢老兄......

标签: sql sql-server


【解决方案1】:

要使 PIVOT 动态,您必须编写一个存储过程。

CREATE PROCEDURE dynPivot 
(
@select varchar(255), 
@pivotColumns varchar(255), 
@summaries varchar(100) 
) AS 

DECLARE @pivot varchar(max), @sql varchar(max), @selectForPivotColumns varchar(max)

SELECT @selectForPivotColumns = REPLACE(@select, 'SELECT', 'SELECT ' + @pivotColumns + ' AS rowValuesToColumns, ')

CREATE TABLE #pivot_columns (pivot_column varchar(100))

SELECT @sql = 'SELECT DISTINCT rowValuesToColumns FROM (' + @selectForPivotColumns + ') as t'

INSERT INTO #pivot_columns
EXEC(@sql)

SELECT @pivot = COALESCE(@pivot + ', ', '') + '[' + pivot_column + ']' FROM #pivot_columns

SELECT @sql = 
'
    SELECT * FROM
    (
        ' + @select + '
    ) AS t
    PIVOT
    (
        ' + @summaries + ' FOR ' + @pivotColumns + ' IN (' + @pivot + ')
    ) AS p
'

EXEC(@sql)

那么你可以这样称呼它:

EXEC dynPivot 'SELECT * FROM tbl_DeductionHead', 'DeductionHead', 'SUM(DeductionPerAmount)';

【讨论】:

    猜你喜欢
    • 2016-10-28
    • 1970-01-01
    • 2015-12-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-08-26
    • 1970-01-01
    相关资源
    最近更新 更多