DECLARE @columns NVARCHAR(MAX);
DECLARE @sql NVARCHAR(MAX);
-- 動態生成要顯示的題目欄位
SELECT @columns = COALESCE(@columns + ', ', '') + QUOTENAME(QUESTION) FROM (
SELECT A.LID, A.QUESTION, a.[RANK]
FROM QUESTIONNAIRE_L A
--LEFT JOIN QUESTIONNAIRE_UA B ON A.LID = B.LID
WHERE A.QID = @QID
) AS questions
ORDER BY [RANK];
-- 動態生成 SQL 查詢
SET @sql = N'
SELECT ORG_ID, EMP_NO, EMP_NAME, ' + @columns + ', SCORE, CREATION_DATE
FROM (
SELECT A.QUESTION, B.EMP_NO, [OPTION].[OPTION],
(select EMP.ORG_ID from ACCService.dbo.EMP_DATA_ALL EMP where EMP.EMP_NO = B.EMP_NO) ORG_ID,
(select EMP.EMP_NAME from ACCService.dbo.EMP_DATA_ALL EMP where EMP.EMP_NO = B.EMP_NO) EMP_NAME,
(select us.SCORE from QUESTIONNAIRE_US us where us.QID = A.QID and us.EMP_NO = B.EMP_NO) SCORE,
(select max(ua.CREATION_DATE) from QUESTIONNAIRE_UA ua where ua.QID = A.QID) CREATION_DATE
FROM QUESTIONNAIRE_L A
LEFT JOIN QUESTIONNAIRE_UA B ON A.LID = B.LID
LEFT JOIN (select distinct outer_list.LID, outer_list.EMP_NO ,STUFF((select '';'' + inner_list. [OPTION]
from QUESTIONNAIRE_UA as inner_list
where inner_list.LID = outer_list.LID
and inner_list.EMP_NO = outer_list.EMP_NO
for xml path('''')),
1,
1,
'''') as [OPTION]
from QUESTIONNAIRE_UA as outer_list ) [OPTION] on B.LID = [OPTION].LID and B.EMP_NO = [OPTION].EMP_NO
WHERE A.QID = '+ cast(@QID as varchar(50)) + '
) AS src
PIVOT (
MAX([OPTION]) -- 或者使用 SUM、MIN、MAX,根據實際情況
FOR QUESTION IN (' + @columns + ')
) AS pivoted';
-- 執行動態生成的 SQL 查詢
EXEC sp_executesql @sql;
請先 登入 以發表留言。