2012-07-25 60 views
0

sql server,如果我有这样的一个表:如何选择多行作为单列

id | name 
------------- 
1 |  x 
2 |  y 
3 |  z 

我想创建一个存储过程在 一行返回的结果是这样的:

x | y | z 

我的代码是:

alter PROCEDURE getSupervisorEvaluationPercentages 
(
    @FirstSupervisorNumber nvarchar(6), 
    @Year int 
) 
as 
DECLARE @Count INT 
DECLARE @OptionID INT 
DECLARE @getOptionID CURSOR 

declare @OptionCountTb table(c int) 


SET @getOptionID = CURSOR FOR 
    SELECT Id FROM ObjectiveOption 
OPEN @getOptionID 
FETCH NEXT 
    FROM @getOptionID INTO @OptionID 
    WHILE @@FETCH_STATUS = 0 
    BEGIN 
     select @Count = (select COUNT(Id) from EvaluationProcess 
      where FirstSupervisorNumber = @FirstSupervisorNumber and Year = @Year and FirstSupervisorEvaluation = @OptionID) 
     insert into @OptionCountTb values(@Count) 
     FETCH NEXT 
     FROM @getOptionID INTO @OptionID 
    END 
CLOSE @getOptionID 
DEALLOCATE @getOptionID 

我想要显示的表的值作为单列

+0

检查这个答案 http://stackoverflow.com/questions/2830139 /转换行到列-in-sql – 2012-07-25 09:59:57

回答

0
select 
    name + ' ' 
from TableName 
for xml path('') 
+0

但我希望每个值都显示为一个单独的单元格 – Adham 2012-07-25 09:48:56

0
CREATE TABLE t1(id int,name varchar(10)) 
INSERT INTO t1 
VALUES(1,'x'), 
(2,'y'), 
(3,'z') 

SELECT STUFF((select '|'+name from t1 for XML path('')),1,1,'') 
0

尝试此解决方案:

DECLARE @cols AS NVARCHAR(MAX), 
    @query AS NVARCHAR(MAX) 

select @cols = STUFF((SELECT ',' + [name] 
        from t01 
      FOR XML PATH(''), TYPE 
      ).value('.', 'NVARCHAR(MAX)') 
     ,1,1,'') 
set @query = 'SELECT ' + @cols + ' from 
      (
       select [name] 
       from t01 
      ) x 
      pivot 
      (
       count([name]) 
       for name in (' + @cols + ') 
      ) p where 1=2 ' 
print(@query) 
execute(@query)