数据列转行 请高手们指点指点哈

我是一只小小小的菜鸟 2013-05-16 02:25:59

创建表格的语句:
CREATE TABLE [dbo].[Table_AA](
[AA] [nchar](10) COLLATE Chinese_PRC_CI_AS NULL,
[B1] [nchar](10) COLLATE Chinese_PRC_CI_AS NULL,
[B2] [nchar](10) COLLATE Chinese_PRC_CI_AS NULL,
[C1] [nchar](10) COLLATE Chinese_PRC_CI_AS NULL,
[C2] [nchar](10) COLLATE Chinese_PRC_CI_AS NULL
) ON [PRIMARY]

INSERT INTO Table_AA(AA,B1,B2,C1,C2)VALUES('A','1','1','2','2')
INSERT INTO Table_AA(AA,B1,B2,C1,C2)VALUES('B','3','3','4','4')
INSERT INTO Table_AA(AA,B1,B2,C1,C2)VALUES('C','5','5','6','6')
INSERT INTO Table_AA(AA,B1,B2,C1,C2)VALUES('D','7','7','8','8')

查出的结果是这样的:
A 1 1
A 2 2
B 3 3
B 4 4
C 5 5
C 6 6
D 7 7
D 8 8

---------------------
有数据量比较大 所以 请考虑一下效率问题 ,union也可以 这个我会用 看看有没有其他的办法 高手们,sql2005版本的。

...全文
117 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
Flyinsky1 2013-05-18
  • 打赏
  • 举报
回复
查一行数据生成两行结果,用游标?,不用union,还能用什么以下纯粹是在玩:
DECLARE @a nchar(10),
@b1 nchar(10),
@b2 nchar(10),
@c1 nchar(10),
@c2 nchar(10)

DECLARE a_cursor CURSOR READ_ONLY FOR 
SELECT aa,b1,b2,c1,c2
FROM table_aa
ORDER BY aa

OPEN a_cursor

FETCH NEXT FROM a_cursor 
INTO @a,@b1,@b2,@c1,@c2

WHILE @@FETCH_STATUS = 0
BEGIN
select @a 'a',@b1 'd1',@b2 'd2'
union all
select @a 'a',@c1 'd1',@c2 'd2'
--print @a+''+@b1+''+@b2
--print @a+''+@c1+''+@c2
FETCH NEXT FROM a_cursor 
INTO @a,@b1,@b2,@c1,@c2
end
CLOSE a_cursor
DEALLOCATE a_cursor
  • 打赏
  • 举报
回复
160万条。
發糞塗牆 2013-05-16
  • 打赏
  • 举报
回复
这个方法应该不慢啊,160条全表扫描两次也不会要很久的啊。把你的执行计划贴出来看看。
  • 打赏
  • 举报
回复
引用 1 楼 ap0405140 的回复:

CREATE TABLE [dbo].[Table_AA](
    [AA] [nchar](10) COLLATE Chinese_PRC_CI_AS NULL,
    [B1] [nchar](10) COLLATE Chinese_PRC_CI_AS NULL,
    [B2] [nchar](10) COLLATE Chinese_PRC_CI_AS NULL,
    [C1] [nchar](10) COLLATE Chinese_PRC_CI_AS NULL,
    [C2] [nchar](10) COLLATE Chinese_PRC_CI_AS NULL
) ON [PRIMARY]
 
INSERT INTO Table_AA(AA,B1,B2,C1,C2)VALUES('A','1','1','2','2')
INSERT INTO Table_AA(AA,B1,B2,C1,C2)VALUES('B','3','3','4','4')
INSERT INTO Table_AA(AA,B1,B2,C1,C2)VALUES('C','5','5','6','6')
INSERT INTO Table_AA(AA,B1,B2,C1,C2)VALUES('D','7','7','8','8')


select AA,D1,D2
from
(select AA,B1 'D1',B2 'D2' from Table_AA 
 union all
 select AA,C1 'D1',C2 'D2' from Table_AA)  t
order by AA,D1,D2
 
/*
AA         D1         D2
---------- ---------- ----------
A          1          1         
A          2          2         
B          3          3         
B          4          4         
C          5          5         
C          6          6         
D          7          7         
D          8          8         

(8 row(s) affected)
*/
union 这个我会的 看看有没有其他的办法 最好能考虑效率问题的 比union 更节省时间的 160条数据 查询的时间需要40秒 有点慢了。
lily_083593 2013-05-16
  • 打赏
  • 举报
回复

select aa,b1,b2 from Table_AA
union all
select aa,c1,c2 from Table_aa
order by aa,b1
唐诗三百首 2013-05-16
  • 打赏
  • 举报
回复

CREATE TABLE [dbo].[Table_AA](
    [AA] [nchar](10) COLLATE Chinese_PRC_CI_AS NULL,
    [B1] [nchar](10) COLLATE Chinese_PRC_CI_AS NULL,
    [B2] [nchar](10) COLLATE Chinese_PRC_CI_AS NULL,
    [C1] [nchar](10) COLLATE Chinese_PRC_CI_AS NULL,
    [C2] [nchar](10) COLLATE Chinese_PRC_CI_AS NULL
) ON [PRIMARY]
 
INSERT INTO Table_AA(AA,B1,B2,C1,C2)VALUES('A','1','1','2','2')
INSERT INTO Table_AA(AA,B1,B2,C1,C2)VALUES('B','3','3','4','4')
INSERT INTO Table_AA(AA,B1,B2,C1,C2)VALUES('C','5','5','6','6')
INSERT INTO Table_AA(AA,B1,B2,C1,C2)VALUES('D','7','7','8','8')


select AA,D1,D2
from
(select AA,B1 'D1',B2 'D2' from Table_AA 
 union all
 select AA,C1 'D1',C2 'D2' from Table_AA)  t
order by AA,D1,D2
 
/*
AA         D1         D2
---------- ---------- ----------
A          1          1         
A          2          2         
B          3          3         
B          4          4         
C          5          5         
C          6          6         
D          7          7         
D          8          8         

(8 row(s) affected)
*/

34,591

社区成员

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

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