Sqlserver
 sql >> Teknologi Basis Data >  >> RDS >> Sqlserver

Kursor SQL dalam konten dinamis

Saya tidak yakin tentang nama kolom. Jadi dalam contoh ini saya mengharapkan tbl_ProjectTransaction untuk memiliki kolom bernama projectName dan tbl_TimeTypeGrouping untuk memiliki GroupName . Seperti seseorang yang berkomentar dalam pertanyaan, Anda tidak boleh menggunakan kursor dalam kasus ini. Anda harus menggunakan pivot dinamis. Berikut ini dan contohnya:

Dapatkan nama grup seperti ini:

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

Ini akan memberi Anda:

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

Dan kemudian lakukan pivot dinamis seperti ini:

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)

Referensi:




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Denormalisasi Data (Mungkin Pivot?)

  2. Menggunakan bootstrap modalpopup di ASP.NET

  3. COALESCE dalam klausa Where?

  4. String split T-SQL

  5. Ukur waktu yang diperlukan untuk mengeksekusi kueri t-sql