Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sockets/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 具有枢轴运算符的动态表 我的桌子_Sql_Sql Server_Sql Server 2008_Pivot - Fatal编程技术网

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