我需要使用pivot从以下数据创建时间表:
我正在使用此查询
select
start_time, end_time, s.subj_name, tt.dd
from
time_table tt
inner join
subj s on tt.subjid = s.subjid
我可以将结果转移到
我使用以下SQL代码来执行此操作:
--Declare necessary variables
DECLARE @SQLQuery AS NVARCHAR(MAX)
DECLARE @PivotColumns AS NVARCHAR(MAX)
--Get unique values of pivot column
SELECT @PivotColumns = COALESCE(@PivotColumns + ',','') + QUOTENAME(dd)
FROM (SELECT DISTINCT(dd)
FROM time_table tt
WHERE divid = 1 AND tt.active = 1) AS PivotExample
SELECT @PivotColumns
--Create the dynamic query with all the values for
--pivot column at runtime
SET @SQLQuery =
N'SELECT start_time,end_time, ' + @PivotColumns + '
FROM [dbo].[time_table]
PIVOT( SUM(subjid)
FOR dd IN (' + @PivotColumns + ')) AS P'
SELECT @SQLQuery
--Execute dynamic query
EXEC sp_executesql @SQLQuery
请帮助我将主题名称作为值而不是subjectid
答案 0 :(得分:0)
由于您要转移VARCHAR,因此无法使用SUM
,但必须使用MAX
或MIN
尝试改为:
SET @SQLQuery =
N'SELECT start_time,end_time, ' + @PivotColumns + '
FROM [dbo].[time_table]
PIVOT( MAX(subjectname)
FOR dd IN (' + @PivotColumns + ')) AS P'
答案 1 :(得分:0)
找到它的答案,它提供了更简单的方法来获得它。 click to get answer