sql >> Databáze >  >> RDS >> Sqlserver

Dynamický SQL Server 2005 Pivot

V poslední době jsem udělal příliš mnoho těchto dynamických dotazů... (moje sloupce se po měsíci posouvají podle klienta). Zde je jeden způsob, jak to udělat – žádné testování, žádné ladění, může existovat několik chyb k odstranění:

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. Jak deklarovat proměnnou a používat ji ve stejném skriptu Oracle SQL?

  2. Získejte seznam argumentů s výchozí hodnotou

  3. PHP/HTML Přidat a odebrat tlačítko

  4. Jak vytvořím tabulku Oracle s vnořenými tabulkami typů objektů?