日期:2014-05-18  浏览次数:20467 次

如何按照查询排序后的顺序依次先后插入一个表中?insert into .. select ..order by..
例如:
insert   into   tableA   (a,b,c)
select   a,b,c   from   tableB   order   by   date
可实际执行的时候,并没有按照排序好的顺序依次先后插入到表tableA中

------解决方案--------------------
其實在數據庫的位置並沒有多大的關係
你select * from TableA 時 order by ..
------解决方案--------------------
--測試沒問題啊

Create Table tableA(a int ,b int ,c int)
Create Table tableB(a int ,b int ,c int, [date] datetime)

Insert tableB select 1, 2, 3, '2007-08-02 '
Union All select 2, 2, 3, '2007-08-01 '
Union All select 3, 2, 3, '2007-08-06 '
Union All select 5, 2, 3, '2007-08-05 '

insert into tableA (a,b,c)
select a,b,c from tableB order by date

Select * From tableA
GO
Drop Table tableA, tableB
--Result
/*
a b c
2 2 3
1 2 3
5 2 3
3 2 3
*/
------解决方案--------------------
insert into tableA (a,b,c)
select a,b,c from tableB order by date
這個時候的order by 根本沒有意義
------解决方案--------------------
558047(三个代表万睡!八荣八耻万睡!) ( ) 信誉:86 2007-08-16 09:12:36 得分: 0


paoluo(一天到晚游泳的鱼)
因为你所测试的数据是简单的
实际中我的数据是很复杂的
所以没有按照排序的顺序insert到另一个表中

------------------
怎麼複雜?原理應該是一致的吧。

我這個例子是將你的複雜問題簡化後來測試的,沒發現問題。
------解决方案--------------------
order by 会起作用的,是不是主键作用了
------解决方案--------------------
数据的存放是根据聚集索引来确定的,如果你的目标表没有建立聚集索引,那数据的存放就没有固定的排序规则。

------解决方案--------------------
CREATE TABLE tmp (ID int identity,ProductNo varchar(15),K varchar(6),L varchar(6),M varchar(6),N varchar(6),
O varchar(6),P varchar(6),Q varchar(6),R varchar(6),S varchar(6),T varchar(6),U varchar(6),V varchar(6),
W varchar(6),X varchar(6),Y varchar(6),Z varchar(6),AA varchar(6),AB varchar(6),AC varchar(6),AD varchar(6),
AE varchar(6),AF varchar(6),AG varchar(6),AH varchar(6),AI varchar(6),AJ varchar(6),AK varchar(6),AL varchar(6),
AM varchar(6),AN varchar(6),AO varchar(6),AP varchar(6),AQ varchar(6),TOTAL varchar(6))
--
GO
CREATE CLUSTERED INDEX index_sort
on tmp
(TOTAL)
----
GO
BEGIN
set @sql1= 'insert into tmp (ProductNo,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z,AA,AB,AC,AD,AE,AF,AG,AH,AI,AJ,AK,AL,AM,AN,AO,AP,AQ,TOTAL) '
set @sql1=@sql1+ ' select ProductNo,sum(k) K,sum(l) L,sum(m) M,sum(n) N,sum(o) O,sum(p) P,sum(q) Q,sum(r) R, '
set @sql1=@sql1+ 'sum(s) S,sum(t) T,sum(u) U,sum(v) V,sum(w) W,sum(x) X,sum(y) Y,sum(z) Z,sum(aa) AA, '
set @sql1=@sql1+ 'sum(ab) AB,sum(ac) AC,sum(ad) AD,sum(ae) AE,sum(af) AF,sum(ag) AG,sum(ah) AH,sum(ai) AI, '
set @sql1=@sql1+ 'sum(aj) AJ,sum(ak) AK,sum(al) AL,sum(am) AM,sum(an) AN,sum(ao) AO,sum(ap) AP,sum(aq) AQ, '
set @sql1=@sql1+ 'sum(WasterQtyT) Total '
set @sql1=@sql1+ ' from gwkBaseData '
set @sql1=@sql1+ ' where ProductNo <> ' ' ' ' and Faculty= ' ' '+@Faculty+ ' ' ' and ProduceDate> = ' ' '+@dtB+ ' ' ' and ProduceDate <= ' ' '+@dtE+ ' ' ' '
set @sql1=@sql1+ ' and ProductNo like ' 'XV% ' ' '
set @sql1=@sql1+ ' and WasterQtyT> 0 '
set @sql1=@sql1+ ' group by ProductNo '
set @sql1= ' order by total desc '