2009-12-01 7 views
1

J'écris une procédure stockée pour Microsoft SQL 2005 et je veux créer un pivot SQL dynamique:Dynamic Pivot (dans SQL Server 2005)

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 (...) 
) 

Préférable Je veux remplacer (...) avec :

SELECT StockLocation.StockLocation FROM StockLocation 

et non hardcode tous les lieux dans la procédure, mais SQL n'accepte pas ([Location1], [Location2], etc.).

Comment résoudre ce problème?

Répondre

1

Vous ne pouvez pas le faire en SQL pur, vous devez utiliser SQL dynamique et générer le SQL réel que vous voulez exécuter.

Vous pouvez le faire comme ceci:

DECLARE @sql VARCHAR(8000) 
SET @sql = 'FOR sm.StockLocation IN (' 

DECLARE cursor... 

LOOP cursor... 

SET @sql = @sql + '''' + column_name + ''',' 

// end loop 

EXEC(@sql) 
+0

D'accord. Colonnes dynamiques = SQL dynamique – gbn