行列转换问题

TT008 2012-07-16 11:29:56
已知表A
id Name A B C D E F G H I
1 A 1 2 3 4 5 6 7 8 9
2 B 9 11 22 33 44 55 66 77 88

求表B
id Name 字段A 字段B 字段C 字段D
1 A 1 2 3 4
2 B 9 11 22 33
1 A 5 6 7 8
2 B 44 55 66 77
1 A 9
2 B 88

要求使用动态SQL语句实现
...全文
93 1 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
SQL77 2012-07-16
  • 打赏
  • 举报
回复

--> 测试数据: TB
if object_id('TB') is not null drop table TB
create table TB (id int,Name varchar(1),A int,B int,C int,D int,E int,F int,G int,H int,I int)
insert into TB
select 1,'A',1,2,3,4,5,6,7,8,9 union all
select 2,'B',9,11,22,33,44,55,66,77,88

select * from TB


SELECT IDD=IDENTITY(INT,1,1),NAME INTO #T
FROM SYSCOLUMNS
WHERE ID=OBJECT_ID('TB') AND NAME NOT IN('ID','NAME')
--SELECT * FROM #T
SELECT
(IDD-1)/4 AS ID,
MAX(CASE WHEN (IDD-1)%4=0 THEN NAME END) AS NAME1,
MAX(CASE WHEN (IDD-1)%4=1 THEN NAME END) AS NAME2,
MAX(CASE WHEN (IDD-1)%4=2 THEN NAME END) AS NAME3,
MAX(CASE WHEN (IDD-1)%4=3 THEN NAME END) AS NAME4 INTO #T2
FROM #T
GROUP BY (IDD-1)/4

DECLARE @S NVARCHAR(4000)
SELECT
@S=ISNULL(@S+' UNION ALL ','')+'SELECT ID,NAME,'+NAME1+ISNULL(','+NAME2,',0')+ISNULL(','+NAME3,',0')+ISNULL(','+NAME4,',0')+' FROM TB'
FROM
#T2

SELECT @S

--DROP TABLE #T,#T2

EXEC('SELECT ID,NAME,A,B,C,D FROM TB
UNION ALL '+@S)

34,838

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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