Tôi không chắc về tên cột. Vì vậy, trong ví dụ này, tôi mong đợi tbl_ProjectTransaction
để có một cột được gọi là projectName
và tbl_TimeTypeGrouping
để có GroupName
. Giống như ai đó đã khen trong câu hỏi, bạn không nên sử dụng con trỏ trong trường hợp này. Bạn nên sử dụng một trục động. Đây là ví dụ:
Lấy tên của các nhóm như sau:
DECLARE @cols VARCHAR(MAX)
SELECT @cols=STUFF
(
(
SELECT
',' +QUOTENAME(tbl_TimeTypeGrouping.sGroupName) -- ????
FROM
tbl_TimeTypeGrouping
FOR XML PATH('')
)
,1,1,'')
Điều này sẽ cung cấp cho bạn:
'[Group A],[Group B],[Group C],[Group N]'
Và sau đó thực hiện một trục động như thế này:
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)
Tài liệu tham khảo: