垂直需要水平柱

时间:2016-08-09 20:57:19

标签: sql sql-server-2008 tsql

我已经在名为Employees的表中编译了数据。表定义是

Name         Age
Sam          25
Mike         28

是否可以编写一个可以以格式

输出的查询
SAM
25
MIKE
28

我无法编写此查询。有可能做到这一点。 如果没有,我怎么能实现这一目标。 我可以使用游标来完成它,但它会大大降低我的proc的性能。

2 个答案:

答案 0 :(得分:1)

轻松修改以满足您的需求

exec()

返回

Declare @User table (id int,First_Name varchar(50),Last_Name varchar(50),EMail varchar(50))
Insert into @User values
(1,'John','Smith','john.smith@gmail.com'),
(2,'Jane','Doe'  ,'jane.doe@gmail.com')

Declare @XML xml
Set @XML = (Select * from @User for XML RAW)

Select ID    = r.value('@id','int')
      ,Item  = Attr.value('local-name(.)','varchar(100)')
      ,Value = Attr.value('.','varchar(max)') 
 From  @XML.nodes('/row') as A(r)
 Cross Apply A.r.nodes('./@*[local-name(.)!="id"]') as B(Attr)

答案 1 :(得分:1)

根据要求,但我认为它没什么价值

Declare @Table varchar(150) = 'YourTableName'   

Declare @SQL varchar(max) = '>>>'
Select @SQL = Replace(@SQL + SQL ,'>>>Union All ','')
 From (Select Seq=ORDINAL_POSITION,SQL='Union All Select Value=cast(['+Column_Name+'] as varchar(500)) From ['+Table_Schema+'].['+Table_Name+']' From INFORMATION_SCHEMA.COLUMNS where Table_Name=@Table) A
 Order By Seq

--Print @SQL
Exec(@SQL)

样品返回

Value
22 Star Ave, Riverside, RI 02915
22 Planet Ave, Riverside, RI 02915
100 Peck Ave, Riverside, RI 02915
1086 Willett Ave, Riverside, RI 02915
4
5
6