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

Kurzor SQL v dynamickém obsahu

Nejsem si jistý názvy sloupců. Takže v tomto příkladu očekávám tbl_ProjectTransaction mít sloupec nazvaný projectName a tbl_TimeTypeGrouping mít GroupName . Jako někdo přišel v otázce, neměli byste v tomto případě používat kurzor. Měli byste použít dynamický pivot. Zde je příklad:

Získejte názvy skupin takto:

DECLARE @cols VARCHAR(MAX)
SELECT @cols=STUFF
(
    (
        SELECT 
            ',' +QUOTENAME(tbl_TimeTypeGrouping.sGroupName) -- ????
        FROM
            tbl_TimeTypeGrouping
        FOR XML PATH('')
    )
,1,1,'')

Tím získáte:

'[Group A],[Group B],[Group C],[Group N]'

A pak proveďte dynamický pivot takto:

DECLARE @query NVARCHAR(4000)=
N'SELECT
    *
FROM
(
    SELECT
        tbl_ProjectTransaction.sProjectName, -- ????
        tbl_ProjectTransaction.decNumberOfHours,
        tbl_TimeTypeGrouping.sGroupName -- ???
    FROM
        tbl_ProjectTransaction
        JOIN tbl_TimeTypeGrouping
            ON tbl_ProjectTransaction.iRefTimeTypeID=tbl_TimeTypeGrouping.iRefTimeTypeID
) AS SourceTable
PIVOT
(
    SUM(decNumberOfHours)
    FOR GroupName IN ('[email protected]+')
) As Pvt'
EXECUTE(@query)

Reference:




  1. Přístup k ladění indexu – 2. část

  2. Velké úložiště .patch_storage

  3. Vyhledávání tabulek v úlohách IRI kompatibilních se SortCL

  4. Problém s regulárním výrazem Oracle