求助:关于列转行

doubeizhuce 2012-02-02 02:44:20
小弟现有这样一张表:
ITEM PRO1 PRO2 PRO3 PRO4 PRO5
A 1 0 0 1 0
B 1 0 1 1 0
C 0 1 0 0 0
D 0 0 1 1 0
E 0 0 0 1 0

要求转成如下结果:

ITEM PRO
A PRO1
A PRO4
B PRO1
B PRO3
B PRO4
C PRO2
D PRO3
D PRO4
E PRO4

实际表中由于列数众多,有60多列,因此不可能用UNION一个select item, pro .... UNION...这样的方法转
请教如何操作?先谢过了
...全文
104 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
wu222w 2012-02-02
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 q806294478 的回复:]
SQL code

create table tb(ITEM VARCHAR(2),PRO1 BIT,PRO2 BIT ,PRO3 BIT ,PRO4 BIT ,PRO5 BIT)
INSERT INTO TB (ITEM,PRO1,PRO2,PRO3,PRO4,PRO5)
SELECT 'A',1,0,0,1,0 UNION ALL
SELECT 'B',1,0,1,1,0 UNION……
[/Quote]

不错~
q806294478 2012-02-02
  • 打赏
  • 举报
回复
create table tb(ITEM VARCHAR(2),PRO1 BIT,PRO2 BIT ,PRO3 BIT ,PRO4 BIT ,PRO5 BIT)
INSERT INTO TB (ITEM,PRO1,PRO2,PRO3,PRO4,PRO5)
SELECT 'A',1,0,0,1,0 UNION ALL
SELECT 'B',1,0,1,1,0 UNION ALL
SELECT 'C',0,1,0,0,0 UNION ALL
SELECT 'D',0,0,1,1,0 UNION ALL
SELECT 'E',0,0,0,1,0
GO
SELECT * FROM tb
GO
DECLARE @SQL VARCHAR(MAX)
SET @SQL='SELECT ITEM,PRO FROM ('+CHAR(10)
SET @SQL=@SQL+'SELECT ITEM,PRO1 AS value,''PRO1'' AS PRO FROM TB'+CHAR(10)
SELECT @SQL=@SQL+'UNION ALL SELECT ITEM,'+NAME+','''+NAME+''' FROM TB '+CHAR(10) FROM SYSCOLUMNS WHERE ID=OBJECT_ID('TB') AND name NOT IN('ITEM','PRO1')
SET @SQL=@SQL+') A where value=1 order by item'
exec (@SQL)

结果为:

ITEM PRO
A PRO1
A PRO4
B PRO4
B PRO1
B PRO3
C PRO2
D PRO3
D PRO4
E PRO4

(9 行受影响)
--小F-- 2012-02-02
  • 打赏
  • 举报
回复
动态列转行。等楼下贴。

22,210

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 疑难问题
社区管理员
  • 疑难问题社区
  • 尘觉
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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