Sqlserver
 sql >> Baza danych >  >> RDS >> Sqlserver

Kursor SQL w zawartości dynamicznej

Nie jestem pewien co do nazw kolumn. Więc w tym przykładzie oczekuję tbl_ProjectTransaction mieć kolumnę o nazwie projectName i tbl_TimeTypeGrouping mieć GroupName . Jakby ktoś komentował w pytaniu nie powinieneś w tym przypadku używać kursora. Powinieneś użyć dynamicznego obrotu. Oto i przykład:

Uzyskaj nazwy grup w ten sposób:

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

To da ci:

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

A następnie wykonaj dynamiczny obrót w ten sposób:

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)

Referencje:




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Używanie CONVERT() w klauzuli WHERE do konwersji varchar na date

  2. jak uzyskać różne rekordy na podstawie maksymalnej daty?

  3. Uzyskaj częstotliwości słów z wyszukiwania pełnotekstowego SQL Server

  4. Utwórz relację jeden do wielu za pomocą SQL Server

  5. Przechowywanie daty Tylko w SQL Server 2005