【问题标题】:Dynamic Pivot (in SQL Server 2005)动态透视(在 SQL Server 2005 中)
【发布时间】:2009-12-01 16:22:16
【问题描述】:

我正在为 Microsoft SQL 2005 编写一个存储过程,我想创建一个动态 SQL Pivot:

SELECT Book.ISBN,
       Book.Name
       StockMutation.StockLocation
FROM   Book INNER JOIN StockMutation AS sm ON Book.bookid = sm.bookid
PIVOT
(
       COUNT(sm.NumberOfBooks)
       FOR sm.StockLocation IN (...)
)

我希望将 (...) 替换为:

SELECT StockLocation.StockLocation FROM StockLocation

并且不对过程中的所有位置([Location1]、[Location2] 等)进行硬编码,但 SQL 不接受这一点。

我该如何解决这个问题?

【问题讨论】:

    标签: sql-server-2005 stored-procedures pivot


    【解决方案1】:

    你不能在纯 SQL 中做到这一点,你必须使用动态 SQL 并构建你想要执行的实际 SQL。

    你可以这样做:

    DECLARE @sql VARCHAR(8000)
    SET @sql = 'FOR sm.StockLocation IN ('
    
    DECLARE cursor...
    
    LOOP cursor...
    
    SET @sql = @sql + '''' + column_name + ''','
    
    // end loop
    
    EXEC(@sql)
    

    【讨论】:

    • 同意。动态列 = 动态 SQL
    猜你喜欢
    • 2018-07-18
    • 1970-01-01
    • 2012-11-13
    • 2015-02-25
    • 2012-02-22
    • 1970-01-01
    • 1970-01-01
    • 2013-01-25
    • 2021-06-07
    相关资源
    最近更新 更多