sql >> Database teknologi >  >> RDS >> Sqlserver

Dynamisk SQL Server 2005 Pivot

Jeg har lavet et par for mange af disse dynamiske forespørgsler på det seneste... (mine kolonner skifter efter klient efter måned). Her er en måde at gøre det på - ingen test, ingen fejlretning, der kan være et par fejl, der skal udbedres:

DECLARE
  @Command     nvarchar(max)
 ,@ColumnList  nvarchar(max)
 ,@OrderId     int
 ,@Debug       bit


--  Build a comman-delimited list of the columns
SELECT @ColumnList = isnull(@ColumnLIst + ',', , '') + ColName
 from dbo.GetTableColumnNames('OrderCash', 2)


--  Insert the list of columns in two places in your query
SET @Command = replace('
SELECT  OrderID, 
        CurrCode + ‘‘GBP CURNCY’‘ AS Ticker, 
        Cash AS Position 
FROM 
( 
    SELECT OrderID, <@ColumnList>
    FROM OrderCash 
) p 
UNPIVOT 
( 
    Cash FOR CurrCode IN  
    (<@ColumnList>) 
) AS unpvt 
WHERE Cash != 0 
And OrderID = @OrderId
', '<@ColumnList>', @ColumnList)


--  Always include something like this!
IF @Debug = 1
    PRINT @Command

--  Using sp_executeSQL over EXECUTE (@Command) allows you execution
--  plan resuse with parameter passing (this is the part you may need
--  to debug on a bit, but it will work)
EXECUTE sp_executeSQL @Command, N'@OrderId int', @OrderId



  1. Afrunding af decimaltal i SQL Server 2008

  2. Opret tabel i MySQL, der matcher en anden tabel?

  3. Bestilling af ikke-engelske bogstaver i MySQL

  4. Oracle 11g-sætninger for at oprette nye brugere og tildele privilegier?