使用一条SQL语句使得每5行作为一条记录插入到另外一张表的5个列中

dl110 2008-02-16 10:42:37
如题.
使用一条SQL语句,使得每5行作为另外一个表的5个列插入.
估计可能需要在SQL语句中做循环.
感觉好像无解.
请各位指点.

如果SQL Server无解,那种数据库支持?
...全文
562 31 打赏 收藏 转发到动态 举报
写回复
用AI写文章
31 条回复
切换为时间正序
请发表友善的回复…
发表回复
dl110 2008-02-20
  • 打赏
  • 举报
回复
通过happyflystone,fcuandy二位的合力,问题得到解决.
结贴.
dl110 2008-02-20
  • 打赏
  • 举报
回复
happyflystone的方法有广泛性,解答详尽.加35分.
fcuandy的建议有技巧.加5分.
fcuandy 2008-02-18
  • 打赏
  • 举报
回复
去加标识列或者用临时表吧, row_number或count计算法出来的行号依赖于排序列,无法得到插入顺序.

为什么非要一条语句,本就是不可能实现的事.
xgcom 2008-02-18
  • 打赏
  • 举报
回复
什么00010002 的,IDENTITY 知道吗?种子。自然就不会重复。
chengqscjh 2008-02-18
  • 打赏
  • 举报
回复
mark and up
newredhat 2008-02-17
  • 打赏
  • 举报
回复
o
rightyeah 2008-02-17
  • 打赏
  • 举报
回复
路过,顶一下
dl110 2008-02-16
  • 打赏
  • 举报
回复
就这么简单?!测试中...
如果通过:
1 充分证明了那句话: 笨不是装出来的;
2 结贴;
3 散分.
-狙击手- 2008-02-16
  • 打赏
  • 举报
回复
不要循环语句呀

类似于上面的例子生成 一个ID呀,然后%5 分组 就行了呀
dl110 2008-02-16
  • 打赏
  • 举报
回复
那也就是说,可以使用Oracle中的RowID来实现.可是如何在SQL中循环?不得要领...
wzy_love_sly 2008-02-16
  • 打赏
  • 举报
回复
我的05也完蛋了!
-狙击手- 2008-02-16
  • 打赏
  • 举报
回复
用子查询呀,一条SQL就行了呀,没有2005,没办法写例子
dl110 2008-02-16
  • 打赏
  • 举报
回复
前提是使用一条SQL语句,而非存储过程等.
dl110 2008-02-16
  • 打赏
  • 举报
回复
即便有row_number(),也应该在SQL中包含循环,如何在SQL中循环?
-狙击手- 2008-02-16
  • 打赏
  • 举报
回复
用2005的row_number()
dl110 2008-02-16
  • 打赏
  • 举报
回复
有Bug

源表仅有一列:
asd
asd
12412
123
123啊师父
士大夫234
wr2143
345saf34523
...

目标表结果:
c1 c2 c3 c4 c5
-------------- ---------- -------------------- --- --------
asd asd 12412 123 123啊师父
士大夫234 wr2143 345saf34523 ...
...
-狙击手- 2008-02-16
  • 打赏
  • 举报
回复
create table ta (asd varchar(16))
insert into ta select
'asd' union select
'12412' union select
'123' union select
'123啊师父' union select
'士大夫234' union select
'wr2143' union select
'345saf34523'



go


select
col1 = max(case when id%5 = 0 then asd else null end ),
col2 = max(case when id%5 = 1 then asd else null end),
col3 = max(case when id%5 = 2 then asd else null end),
col4 = max(case when id%5 = 3 then asd else null end),
col5 = max(case when id%5 = 4 then asd else null end)
from (select id = (select count(1)
from ta
where asd <= b.asd) ,*
from ta b) a
group by id/5
/*
col1 col2 col3 col4 col5
---------------- ---------------- ---------------- ---------------- ----------------
NULL 123 123啊师父 12412 345saf34523
asd wr2143 士大夫234 NULL NULL

*/

drop table ta
dl110 2008-02-16
  • 打赏
  • 举报
回复
源表仅有一列:
asd
asd
12412
123
123啊师父
士大夫234
wr2143
345saf34523
...

目标表结果:
比如仅有一列:
asd , asd, 12412,123,123啊师父
士大夫234,wr2143,345saf34523 ,...
...
-狙击手- 2008-02-16
  • 打赏
  • 举报
回复
楼上的方法很具有普遍意义,但不太符合我的要求:
源表中无主键,唯一的条件是顺序读取,每5条生成另外一张表的一条记录.
---

如果表存在唯一的标识列那也是好办的
-狙击手- 2008-02-16
  • 打赏
  • 举报
回复
楼上的方法很具有普遍意义,但不太符合我的要求:
源表中无主键,唯一的条件是顺序读取,每5条生成另外一张表的一条记录.
----

用2005的row_number()
加载更多回复(11)

34,587

社区成员

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

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