【问题标题】:dynamic table with pivot operator带有枢轴运算符的动态表
【发布时间】:2014-09-04 05:39:33
【问题描述】:

我的桌子

cname |  ename 
------+-------      
aaa   |   aaaa      
raj   |   tesfsa    
raj   |   aaaa  

需要看起来像这样

cname   |   interviewer1   |   interviewer2  
--------+------------------+------------------- 
raj     |       aaaa       |       tesfsa   
aaa     |       aaaa       |

cname 可以有多个面试官(动态)...这就是问题..

我认为它需要使用动态支点运算符,我对支点了解不多..请帮助我...

【问题讨论】:

  • 有人来帮我吗...
  • 面试官人数有上限吗?
  • 可能是6位面试官

标签: sql sql-server sql-server-2008 pivot


【解决方案1】:

SQL FIDDLE

这正是你想要的。

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

结束

【讨论】:

  • @Kasirajan,您所说的直接代码是什么意思?这是我能想到的最小行,也许放在存储过程中?我很确定你不能用 1 行来完成,除非你的数据透视表有固定值
  • @Kasirajan,只需选择不同的你的名字就行了吗?
  • @Kasirajan,我还是不明白你,如果你区分名字,它会得到正确的计数吗?从#temp中选择计数(不同的名称)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-12-26
  • 2017-09-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多