我在课程和辅导员之间有一对多的关系。外键位于Course表中。如何选择辅助员作为独立者,并将其多个课程ID作为辅导员旁边的列。
SELECT dbo.Facilitator.Fac_ID, dbo.Facilitator.Fac_Name, dbo.Course.Course_ID
FROM dbo.Course
RIGHT JOIN dbo.Facilitator ON dbo.Course.FK_Facilitator = dbo.Facilitator.Fac_ID
order by dbo.Facilitator.Fac_Name asc
返回:
相反,我想:
答案 0 :(得分:0)
对于旋转,应定义列名称。在您的情况下,根据您的问题,您没有这样的列名。所以我们创建样本列名称,如1,2等。
首先,获取pivot
的列名DECLARE @cols NVARCHAR (MAX)
SELECT @cols = COALESCE (@cols + ',[' + COLUMNNAME + ']', '[' + COLUMNNAME + ']')
FROM
(
-- Generates random column names numerically from 1,2 etc
SELECT DISTINCT CAST(ROW_NUMBER() OVER(PARTITION BY ID ORDER BY (SELECT 0))AS VARCHAR(4))COLUMNNAME
FROM #TEMP
) PV
ORDER BY CAST(COLUMNNAME AS INT)
现在转动结果。我在里面写了逻辑。
DECLARE @query NVARCHAR(MAX)
SET @query = '-- This outer query forms your pivoted result
SELECT * FROM
(
-- Source data for pivoting
SELECT ID,NAME,VALUE,
CAST(ROW_NUMBER() OVER(PARTITION BY ID ORDER BY (SELECT 0))AS VARCHAR(4)) COLUMNNAME
FROM #TEMP
) x
PIVOT
(
--Defines the values in each dynamic columns
MIN(VALUE)
-- Get the names from the @cols variable to show as column
FOR COLUMNNAME IN (' + @cols + ')
) p
ORDER BY NAME;'
EXEC SP_EXECUTESQL @query