横向转为纵向(等着用)

wudong859 2007-10-27 10:18:08
我有一个表 tt,内容如下:
----------------------------------------------------------------------
字段: F001 F002 F003 F004 F005 F006 F007 F008 F009
内容: 谢 谢 各 位 大 虾 的 帮 助
----------------------------------------------------------------------
想实现为
字段: W1 W2
内容: F001 谢
F002 谢
F003 各
F004 位
F005 大
F006 虾
------------------
谢谢了。。
...全文
106 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
Generics 2007-10-27
  • 打赏
  • 举报
回复
Use tempdb

create table tt
(F001 nvarchar(10), F002 nvarchar(10), F003 nvarchar(10), F004 nvarchar(10),
F005 nvarchar(10), F006 nvarchar(10), F007 nvarchar(10), F008 nvarchar(10),
F009 nvarchar(10))

insert tt
select N'谢', N'谢', N'各', N'位', N'大', N'侠', N'的', N'帮', N'助'

select * from tt

select W1, W2
from tt
unpivot (W2 for W1 in (F001, F002, F003, F004, F005, F006, F007, F008, F009)) as t

drop table tt


W1 W2
-------------------------------------------------------------------------------------------------------------------------------- ----
F001 谢
F002 谢
F003 各
F004 位
F005 大
F006 侠
F007 的
F008 帮
F009 助
zhou__zhou 2007-10-27
  • 打赏
  • 举报
回复
/*测试数据*/
CREATE TABLE tt(f001 VARCHAR(10),f002 VARCHAR(10),f003 VARCHAR(10),
f004 VARCHAR(10),f005 VARCHAR(10),f006 VARCHAR(10),f007 VARCHAR(10),f008 VARCHAR(10),f009 VARCHAR(10))
INSERT INTO tt
SELECT '谢','谢','各','位','大','虾','的','帮','助'
SELECT * FROM tt

DECLARE @sql VARCHAR(8000)
SELECT @sql = COALESCE(@sql,'')+'union all select '''+[name]+''' as [w1],'+[name]+' as [w2] from tt '
FROM SysColumns Where ID = OBJECT_ID(N'tt') Order By ColID
SET @sql=STUFF(@sql,1,9,'')
--PRINT @sql
EXEC (@sql)
wudong859 2007-10-27
  • 打赏
  • 举报
回复
roy_88 你好。
现在我写的是 F009 最大列,实际我的表我也不知道它共有多少列,所以你这个方法不是很可行。
除非先知道这个表共有多少列。

在帮我想想,谢谢先,呵呵。。。
中国风 2007-10-27
  • 打赏
  • 举报
回复
05:

select
w1,orders as w2
from t1
unpivot
(orders for [w1] in([F001],[F002],[F003],[F004],...)
)as t2
中国风 2007-10-27
  • 打赏
  • 举报
回复
select 'F001' as w1,F001 as w2 from table1
union all
select 'F002' as w1,F002 as w2 from table1
union all
............
order by W1 asc
zhou__zhou 2007-10-27
  • 打赏
  • 举报
回复
--try
DECLARE @sql VARCHAR(8000)
SELECT @sql = COALESCE(@sql,'')+'union all select '''+[name]+''' as [w1],'+[name]+' as [w2] from tt '
FROM SysColumns Where ID = OBJECT_ID(N'你的表名') Order By ColID
SET @sql=STUFF(@sql,1,9,'')
--PRINT @sql
EXEC (@sql)
wudong859 2007-10-27
  • 打赏
  • 举报
回复
可能我说得太局限了。。
其实我的 TT 表是自动生成出来的,所以根本不知道有多少列,我用F001,F002。。。。表示列而已
我是想把生成的所有列由原来的横向转为纵向
谢谢上面回答的大虾们!

27,579

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 应用实例
社区管理员
  • 应用实例社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧