读书人

怎么补空行

发布时间: 2012-01-31 21:28:41 作者: rapoo

如何补空行?

SQL code
---------建立测试数据(MSSQL2000)if  exists (select * from sysobjects where id = object_id(N'table1') and OBJECTPROPERTY(id, N'IsUserTable') = 1)begin   drop table table1endGOCREATE TABLE [table1] (    [系统单号] [int] NOT NULL ,    [系统行号] [int] NULL ,    [系统款号] [int] NULL ,    [箱号] [varchar] (6000) COLLATE Chinese_PRC_CI_AS NULL ,    [颜色] [varchar] (50) COLLATE Chinese_PRC_CI_AS NULL ,    [尺码] [varchar] (50) COLLATE Chinese_PRC_CI_AS NULL ,    [数量] [numeric](20, 8) NULL ) ON [PRIMARY]GOInsert table1 (系统单号,系统行号,系统款号,箱号,颜色,尺码,数量)  Values ( 662,16030,15761,'662#16030','白色','215',1.00000000)Insert table1 (系统单号,系统行号,系统款号,箱号,颜色,尺码,数量)  Values ( 662,16030,15761,'662#16030','白色','220',1.00000000)Insert table1 (系统单号,系统行号,系统款号,箱号,颜色,尺码,数量)  Values ( 662,16030,15761,'662#16030','白色','225',2.00000000)Insert table1 (系统单号,系统行号,系统款号,箱号,颜色,尺码,数量)  Values ( 662,16030,15761,'662#16030','白色','230',1.00000000)Insert table1 (系统单号,系统行号,系统款号,箱号,颜色,尺码,数量)  Values ( 662,16030,15761,'662#16030','白色','235',1.00000000)Insert table1 (系统单号,系统行号,系统款号,箱号,颜色,尺码,数量)  Values ( 662,16030,15761,'662#16030','白色','240',NULL)Insert table1 (系统单号,系统行号,系统款号,箱号,颜色,尺码,数量)  Values ( 662,16030,15761,'662#16030','白色','245',NULL)Insert table1 (系统单号,系统行号,系统款号,箱号,颜色,尺码,数量)  Values ( 662,16030,15761,'662#16030','白色','250',NULL)Insert table1 (系统单号,系统行号,系统款号,箱号,颜色,尺码,数量)  Values ( 662,16031,15762,'662#16031','白色','21',1.00000000)Insert table1 (系统单号,系统行号,系统款号,箱号,颜色,尺码,数量)  Values ( 662,16031,15762,'662#16031','白色','22',2.00000000)Insert table1 (系统单号,系统行号,系统款号,箱号,颜色,尺码,数量)  Values ( 662,16031,15762,'662#16031','白色','23',3.00000000)Insert table1 (系统单号,系统行号,系统款号,箱号,颜色,尺码,数量)  Values ( 662,16031,15762,'662#16031','白色','24',NULL)Insert table1 (系统单号,系统行号,系统款号,箱号,颜色,尺码,数量)  Values ( 662,16031,15762,'662#16031','白色','25',NULL)goselect * from table1go-------由上面的表,以(系统单号,系统行号,系统款号,箱号,颜色)作为分组,以尺码不同分配一个流水号,-------流水号不够10行补满10行,补上的尺码和数量显示为NULL-------要得到的查询结果/*Num 系统单号 系统行号 系统款号 箱号 颜色 尺码 数量----------------------------------------------1    662    16030    15761    662#16030    白色    215    1.000000002    662    16030    15761    662#16030    白色    220    1.000000003    662    16030    15761    662#16030    白色    225    2.000000004    662    16030    15761    662#16030    白色    230    1.000000005    662    16030    15761    662#16030    白色    235    1.000000006    662    16030    15761    662#16030    白色    240    NULL7    662    16030    15761    662#16030    白色    245    NULL8    662    16030    15761    662#16030    白色    250    NULL9    662    16030    15761    662#16030    白色    NULL   NULL10   662    16030    15761    662#16030    白色    NULL   NULL1    662    16031    15762    662#16031    白色    21     1.000000002    662    16031    15762    662#16031    白色    22     2.000000003    662    16031    15762    662#16031    白色    23     3.000000004    662    16031    15762    662#16031    白色    24     NULL5    662    16031    15762    662#16031    白色    25     NULL6    662    16031    15762    662#16031    白色    NULL   NULL7    662    16031    15762    662#16031    白色    NULL   NULL8    662    16031    15762    662#16031    白色    NULL   NULL9    662    16031    15762    662#16031    白色    NULL   NULL10   662    16031    15762    662#16031    白色    NULL   NULL*/

要考虑插入速度,可参考
http://topic.csdn.net/u/20111205/20/9ca81bfa-48d8-47fa-a35b-0bc9f6e406c8.html?2042739644


[解决办法]
SQL code
if  exists (select * from sysobjects where id = object_id(N'table1') and OBJECTPROPERTY(id, N'IsUserTable') = 1)begin   drop table table1endGOCREATE TABLE [table1] (    [系统单号] [int] NOT NULL ,    [系统行号] [int] NULL ,    [系统款号] [int] NULL ,    [箱号] [varchar] (6000) COLLATE Chinese_PRC_CI_AS NULL ,    [颜色] [varchar] (50) COLLATE Chinese_PRC_CI_AS NULL ,    [尺码] [varchar] (50) COLLATE Chinese_PRC_CI_AS NULL ,    [数量] [numeric](20, 8) NULL ) ON [PRIMARY]GOInsert table1 (系统单号,系统行号,系统款号,箱号,颜色,尺码,数量)  Values ( 662,16030,15761,'662#16030','白色','215',1.00000000)Insert table1 (系统单号,系统行号,系统款号,箱号,颜色,尺码,数量)  Values ( 662,16030,15761,'662#16030','白色','220',1.00000000)Insert table1 (系统单号,系统行号,系统款号,箱号,颜色,尺码,数量)  Values ( 662,16030,15761,'662#16030','白色','225',2.00000000)Insert table1 (系统单号,系统行号,系统款号,箱号,颜色,尺码,数量)  Values ( 662,16030,15761,'662#16030','白色','230',1.00000000)Insert table1 (系统单号,系统行号,系统款号,箱号,颜色,尺码,数量)  Values ( 662,16030,15761,'662#16030','白色','235',1.00000000)Insert table1 (系统单号,系统行号,系统款号,箱号,颜色,尺码,数量)  Values ( 662,16030,15761,'662#16030','白色','240',NULL)Insert table1 (系统单号,系统行号,系统款号,箱号,颜色,尺码,数量)  Values ( 662,16030,15761,'662#16030','白色','245',NULL)Insert table1 (系统单号,系统行号,系统款号,箱号,颜色,尺码,数量)  Values ( 662,16030,15761,'662#16030','白色','250',NULL)Insert table1 (系统单号,系统行号,系统款号,箱号,颜色,尺码,数量)  Values ( 662,16031,15762,'662#16031','白色','21',1.00000000)Insert table1 (系统单号,系统行号,系统款号,箱号,颜色,尺码,数量)  Values ( 662,16031,15762,'662#16031','白色','22',2.00000000)Insert table1 (系统单号,系统行号,系统款号,箱号,颜色,尺码,数量)  Values ( 662,16031,15762,'662#16031','白色','23',3.00000000)Insert table1 (系统单号,系统行号,系统款号,箱号,颜色,尺码,数量)  Values ( 662,16031,15762,'662#16031','白色','24',NULL)Insert table1 (系统单号,系统行号,系统款号,箱号,颜色,尺码,数量)  Values ( 662,16031,15762,'662#16031','白色','25',NULL)       select m.*,n.尺码,n.数量from (select * from(select 1 as no union select 3 union select 4 union           select 5 union select 6 union select 2       union select 7 union select 8 union select 9 union select 10) a,     (select distinct 系统单号,系统行号,系统款号,箱号,颜色 from table1) b) mleft join(select no=(select COUNT(*) from table1    where 系统单号=a.系统单号 and 系统行号=a.系统行号 and 系统款号=a.系统款号           and 箱号=a.箱号 and 颜色=a.颜色 and [尺码]<=a.[尺码]),*from table1 a ) non m.系统单号=n.系统单号 and m.系统行号=n.系统行号 and m.系统款号=n.系统款号           and m.箱号=n.箱号 and m.颜色=n.颜色 and m.no=n.noorder by  m.系统行号,m.no    /*no          系统单号        系统行号        系统款号        箱号    颜色     尺码       数量----------- ----------- ----------- ----------- ---------------- -------------------------------------------------------1           662         16030       15761       662#16030        白色     215      1.000000002           662         16030       15761       662#16030        白色     220      1.000000003           662         16030       15761       662#16030        白色     225      2.000000004           662         16030       15761       662#16030        白色     230      1.000000005           662         16030       15761       662#16030        白色     235      1.000000006           662         16030       15761       662#16030        白色     240      NULL7           662         16030       15761       662#16030        白色     245      NULL8           662         16030       15761       662#16030        白色     250      NULL9           662         16030       15761       662#16030        白色     NULL     NULL10          662         16030       15761       662#16030        白色     NULL     NULL1           662         16031       15762       662#16031        白色     21       1.000000002           662         16031       15762       662#16031        白色     22       2.000000003           662         16031       15762       662#16031        白色     23       3.000000004           662         16031       15762       662#16031        白色     24       NULL5           662         16031       15762       662#16031        白色     25       NULL6           662         16031       15762       662#16031        白色     NULL     NULL7           662         16031       15762       662#16031        白色     NULL     NULL8           662         16031       15762       662#16031        白色     NULL     NULL9           662         16031       15762       662#16031        白色     NULL     NULL10          662         16031       15762       662#16031        白色     NULL     NULL(20 行受影响) 


[解决办法]

SQL code
CREATE TABLE [table1] (    [系统单号] [int] NOT NULL ,    [系统行号] [int] NULL ,    [系统款号] [int] NULL ,    [箱号] [varchar] (6000) COLLATE Chinese_PRC_CI_AS NULL ,    [颜色] [varchar] (50) COLLATE Chinese_PRC_CI_AS NULL ,    [尺码] [varchar] (50) COLLATE Chinese_PRC_CI_AS NULL ,    [数量] [numeric](20, 8) NULL ) ON [PRIMARY]Insert table1 (系统单号,系统行号,系统款号,箱号,颜色,尺码,数量)  Values ( 662,16030,15761,'662#16030','白色','215',1.00000000)Insert table1 (系统单号,系统行号,系统款号,箱号,颜色,尺码,数量)  Values ( 662,16030,15761,'662#16030','白色','220',1.00000000)Insert table1 (系统单号,系统行号,系统款号,箱号,颜色,尺码,数量)  Values ( 662,16030,15761,'662#16030','白色','225',2.00000000)Insert table1 (系统单号,系统行号,系统款号,箱号,颜色,尺码,数量)  Values ( 662,16030,15761,'662#16030','白色','230',1.00000000)Insert table1 (系统单号,系统行号,系统款号,箱号,颜色,尺码,数量)  Values ( 662,16030,15761,'662#16030','白色','235',1.00000000)Insert table1 (系统单号,系统行号,系统款号,箱号,颜色,尺码,数量)  Values ( 662,16030,15761,'662#16030','白色','240',NULL)Insert table1 (系统单号,系统行号,系统款号,箱号,颜色,尺码,数量)  Values ( 662,16030,15761,'662#16030','白色','245',NULL)Insert table1 (系统单号,系统行号,系统款号,箱号,颜色,尺码,数量)  Values ( 662,16030,15761,'662#16030','白色','250',NULL)Insert table1 (系统单号,系统行号,系统款号,箱号,颜色,尺码,数量)  Values ( 662,16031,15762,'662#16031','白色','21',1.00000000)Insert table1 (系统单号,系统行号,系统款号,箱号,颜色,尺码,数量)  Values ( 662,16031,15762,'662#16031','白色','22',2.00000000)Insert table1 (系统单号,系统行号,系统款号,箱号,颜色,尺码,数量)  Values ( 662,16031,15762,'662#16031','白色','23',3.00000000)Insert table1 (系统单号,系统行号,系统款号,箱号,颜色,尺码,数量)  Values ( 662,16031,15762,'662#16031','白色','24',NULL)Insert table1 (系统单号,系统行号,系统款号,箱号,颜色,尺码,数量)  Values ( 662,16031,15762,'662#16031','白色','25',NULL)select e.*,a.尺码,a.数量from(select * from(select number Numfrom master.dbo.spt_values where [type]='P' and number between 1 and 10) ccross join(select 系统单号,系统行号,系统款号,箱号,颜色from table1group by 系统单号,系统行号,系统款号,箱号,颜色) d) eleft join(select row_number() over(partition by 系统单号,系统行号,系统款号,箱号,颜色 order by [尺码]) rn,*from table1 ) aon e.Num=a.rn and e.系统单号=a.系统单号 and e.系统行号=a.系统行号 and e.系统款号=a.系统款号 and e.箱号=a.箱号 and e.颜色=a.颜色Num         系统单号        系统行号        系统款号        箱号                   颜色         尺码         数量----------- ----------- ----------- ----------- -------------------- ---------- ---------- ---------------------------------------1           662         16030       15761       662#16030            白色         215        1.000000002           662         16030       15761       662#16030            白色         220        1.000000003           662         16030       15761       662#16030            白色         225        2.000000004           662         16030       15761       662#16030            白色         230        1.000000005           662         16030       15761       662#16030            白色         235        1.000000006           662         16030       15761       662#16030            白色         240        NULL7           662         16030       15761       662#16030            白色         245        NULL8           662         16030       15761       662#16030            白色         250        NULL9           662         16030       15761       662#16030            白色         NULL       NULL10          662         16030       15761       662#16030            白色         NULL       NULL1           662         16031       15762       662#16031            白色         21         1.000000002           662         16031       15762       662#16031            白色         22         2.000000003           662         16031       15762       662#16031            白色         23         3.000000004           662         16031       15762       662#16031            白色         24         NULL5           662         16031       15762       662#16031            白色         25         NULL6           662         16031       15762       662#16031            白色         NULL       NULL7           662         16031       15762       662#16031            白色         NULL       NULL8           662         16031       15762       662#16031            白色         NULL       NULL9           662         16031       15762       662#16031            白色         NULL       NULL10          662         16031       15762       662#16031            白色         NULL       NULL(20 row(s) affected) 

读书人网 >SQL Server

热点推荐