sql >> Databasteknik >  >> RDS >> Sqlserver

Dynamisk SQL Server 2005 Pivot

Jag har gjort några för många av dessa dynamiska frågor på senare tid... (mina kolumner skiftar efter klient efter månad). Här är ett sätt att göra det – inga tester, ingen felsökning, det kan finnas några buggar att lösa:

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. Hur kan jag konvertera alla kolumner i min databas till skiftlägesokänsliga

  2. PostgreSQL vs. MySQL:Vilket är bäst?

  3. Oracle/SQL - Kombinera räkningar från "orelaterade" orelaterade tabeller

  4. Fel Ingen databas vald PHP/mySQL