公司A 公司B 公司C ..........
公司1 公司4 公司7 ..........
公司2 公司5 公司8 ..........
公司3 公司6 公司9 ............
希望得到下列结果:
公司
公司1
公司2
公司3
公司4
公司5
公司6
公司7
公司8
公司9
.........
实际数据可能有几百列。
请问用SQL语句如何实现。
9 个解决方案
#1
SELECT 公司名称
FROM table1
UNPIVOT
(Orders FOR 公司名称 IN
(列1, 列2, 列3, 列4, 列5) -- 几百个列名都写在这里
) u
#2
这么多列,难道我都要写出来吗,能够用个变量呢。
#3
配合 select name from sys.all_columns where object_id=object_id('tbname')
#4
你的意思是做嵌套查询,我试试吧。
#5
create table t
(公司A varchar(20),
公司B varchar(20),
公司C varchar(20)
)
select * from t
insert into t values('公司1','公司2','公司3')
insert into t values('公司4','公司5','公司6')
insert into t values('公司7','公司8','公司9')
insert into t values('公司10','公司11','公司12')
declare @sql varchar(8000)
set @sql='';
select @sql=@sql+'UNION ALL select '+quotename(Name) +' 公司 from t '
from syscolumns where ID=object_id('t')
set @sql=STUFF(@sql,1,9,'')
exec (@sql)
#6
declare @col varchar(max)
set @col=''
select @col=@col +','+ name from syscolumns where id=object_id('tb1')
set @col= stuff(@col,1,1,'')
print(
'SELECT 公司名称
FROM table1
UNPIVOT
(Orders FOR 公司名称 IN
('+@col+')
) u'
)
#7
declare @col varchar(max)
set @col=''
select @col=@col +','+ name from syscolumns where id=object_id('tb1')
set @col= stuff(@col,1,1,'')
exec(
'SELECT 公司名称
FROM table1
UNPIVOT
(Orders FOR 公司名称 IN
('+@col+')
) u'
)
#8
还有更好的方法吗?
#9
你回帖的这个功夫,用复制、粘贴、替换,早就把几百个列名的SQL写好了!
#1
SELECT 公司名称
FROM table1
UNPIVOT
(Orders FOR 公司名称 IN
(列1, 列2, 列3, 列4, 列5) -- 几百个列名都写在这里
) u
#2
这么多列,难道我都要写出来吗,能够用个变量呢。
#3
配合 select name from sys.all_columns where object_id=object_id('tbname')
#4
你的意思是做嵌套查询,我试试吧。
#5
create table t
(公司A varchar(20),
公司B varchar(20),
公司C varchar(20)
)
select * from t
insert into t values('公司1','公司2','公司3')
insert into t values('公司4','公司5','公司6')
insert into t values('公司7','公司8','公司9')
insert into t values('公司10','公司11','公司12')
declare @sql varchar(8000)
set @sql='';
select @sql=@sql+'UNION ALL select '+quotename(Name) +' 公司 from t '
from syscolumns where ID=object_id('t')
set @sql=STUFF(@sql,1,9,'')
exec (@sql)
#6
declare @col varchar(max)
set @col=''
select @col=@col +','+ name from syscolumns where id=object_id('tb1')
set @col= stuff(@col,1,1,'')
print(
'SELECT 公司名称
FROM table1
UNPIVOT
(Orders FOR 公司名称 IN
('+@col+')
) u'
)
#7
declare @col varchar(max)
set @col=''
select @col=@col +','+ name from syscolumns where id=object_id('tb1')
set @col= stuff(@col,1,1,'')
exec(
'SELECT 公司名称
FROM table1
UNPIVOT
(Orders FOR 公司名称 IN
('+@col+')
) u'
)
#8
还有更好的方法吗?
#9
你回帖的这个功夫,用复制、粘贴、替换,早就把几百个列名的SQL写好了!