[英]Pivot join with two columns having varchar datatype in SQL Server 2012
I need to use pivot to create time table from the following data: 我需要使用数据透视表从以下数据创建时间表:
I'm using this query 我正在使用此查询
select
start_time, end_time, s.subj_name, tt.dd
from
time_table tt
inner join
subj s on tt.subjid = s.subjid
I am able to pivot my result to 我可以将结果转向
I used following SQL code to do that: 我使用下面的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
Do help me out to get subjectname as value instead of subjectid 一定要帮助我获取主题名称而不是subjectid作为值
Since you are pivoting a VARCHAR, you can't use SUM
, but have to use MAX
or MIN
由于要使用VARCHAR,因此无法使用SUM
,而必须使用MAX
或MIN
Try instead: 请尝试:
SET @SQLQuery =
N'SELECT start_time,end_time, ' + @PivotColumns + '
FROM [dbo].[time_table]
PIVOT( MAX(subjectname)
FOR dd IN (' + @PivotColumns + ')) AS P'
Found answer for it which provides simpler way to get it. 找到了答案,它提供了更简单的方法。 click to get answer 点击获取答案
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.