sql >> Database teknologi >  >> RDS >> Sqlserver

SQL-markør i dynamisk indhold

Jeg er ikke sikker på kolonnenavnene. Så i dette eksempel forventer jeg tbl_ProjectTransaction at have en kolonne kaldet projectName og tbl_TimeTypeGrouping at have et GroupName . Ligesom en person, der angav i spørgsmålet, bør du ikke bruge en markør i dette tilfælde. Du bør bruge en dynamisk pivot. Her er et eksempel:

Få navnene på grupperne sådan her:

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

Dette vil give dig:

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

Og lav så en dynamisk pivot som denne:

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)

Referencer:




  1. Hvordan man håndterer tab af præcision på JDBC numeriske typer på grund af grupperingsfunktioner

  2. Sådan markeres et bestemt antal rækker i tabellen ved samtidig adgang

  3. Oprettelse af delvist unikt indeks med sqlalchemy på Postgres

  4. SQL Server Dynamic Pivot i UDF, der returnerer tabel