Sql 具有枢轴运算符的动态表 我的桌子
你需要看起来像这样Sql 具有枢轴运算符的动态表 我的桌子,sql,sql-server,sql-server-2008,pivot,Sql,Sql Server,Sql Server 2008,Pivot,你需要看起来像这样 cname | interviewer1 | interviewer2 --------+------------------+------------------- raj | aaaa | tesfsa aaa | aaaa | cname可以有多个面试官(动态)。。。这就是问题所在 我认为需要使用动态pivot运算符,我对pivot不太了解。。请帮帮我,伙计们… 这
cname | interviewer1 | interviewer2
--------+------------------+-------------------
raj | aaaa | tesfsa
aaa | aaaa |
cname可以有多个面试官(动态)。。。这就是问题所在
我认为需要使用动态pivot运算符,我对pivot不太了解。。请帮帮我,伙计们…
这正是你想要的
create procedure pro
as
BEGIN
DECLARE @colsName VARCHAR(MAX);
DECLARE @cols VARCHAR(MAX);
DECLARE @query NVARCHAR(MAX);
CREATE TABLE #temp
(
cname VARCHAR(50),
ename VARCHAR(50)
)
INSERT INTO #temp
select (c.Firstname+c.Lastname) as cname,(e.EmployeeFName+e.EmployeeLName) as ename
from CandidateProfile c inner join JobApplied ja on (ja.ProfileId = c.ProfileID)
inner join JobInterview ji on (ja.JobApplyUID = ji.JobApplyUID)
inner join Employees e on (ji.InterviewBy = e.EmployeeID)
group by c.Firstname+c.Lastname,InterviewTimeFrom,e.EmployeeFName+e.EmployeeLName
SELECT @colsName = COALESCE(@colsName + ', ','') + colName
FROM (select distinct ename + ' AS interviewer' +
convert(varchar, DENSE_RANK() OVER (ORDER BY ename ASC)) as colName
FROM #temp) a
SELECT @cols = COALESCE(@cols + ', ','') + ename
FROM (select distinct ename
FROM #temp) b
SET @query = N'SELECT cname, '+
@colsname +'
FROM #temp
PIVOT
(
MAX(ename)
FOR ename IN
( '+@cols +' )
) AS pvt'
EXECUTE(@query)
DROP TABLE #temp
结束有人来帮我吗……面试官的人数最多吗?可能是6人interviewer@Kasirajan,你所说的直接代码是什么意思?这是我能想到的最小行,可能放在存储过程中?我敢肯定,除非你的数据透视表已经修复,否则你不能用一行来完成value@Kasirajan,只需选择distinct,你的珐琅就会正确吗?@Kasirajan,我还是不明白你的意思,如果你选择distinct,珐琅就会正确计数?从#temp中选择计数(不同的名称)
create procedure pro
as
BEGIN
DECLARE @colsName VARCHAR(MAX);
DECLARE @cols VARCHAR(MAX);
DECLARE @query NVARCHAR(MAX);
CREATE TABLE #temp
(
cname VARCHAR(50),
ename VARCHAR(50)
)
INSERT INTO #temp
select (c.Firstname+c.Lastname) as cname,(e.EmployeeFName+e.EmployeeLName) as ename
from CandidateProfile c inner join JobApplied ja on (ja.ProfileId = c.ProfileID)
inner join JobInterview ji on (ja.JobApplyUID = ji.JobApplyUID)
inner join Employees e on (ji.InterviewBy = e.EmployeeID)
group by c.Firstname+c.Lastname,InterviewTimeFrom,e.EmployeeFName+e.EmployeeLName
SELECT @colsName = COALESCE(@colsName + ', ','') + colName
FROM (select distinct ename + ' AS interviewer' +
convert(varchar, DENSE_RANK() OVER (ORDER BY ename ASC)) as colName
FROM #temp) a
SELECT @cols = COALESCE(@cols + ', ','') + ename
FROM (select distinct ename
FROM #temp) b
SET @query = N'SELECT cname, '+
@colsname +'
FROM #temp
PIVOT
(
MAX(ename)
FOR ename IN
( '+@cols +' )
) AS pvt'
EXECUTE(@query)
DROP TABLE #temp