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

如何补空行?
SQL code

---------建立测试数据(MSSQL2000)

if  exists (select * from sysobjects where id = object_id(N'table1') and OBJECTPROPERTY(id, N'IsUserTable') = 1)
begin
   drop table table1
end
GO

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]
GO


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)

go
select * from table1

go
-------由上面的表,以(系统单号,系统行号,系统款号,箱号,颜色)作为分组,以尺码不同分配一个流水号,
-------流水号不够10行补满10行,补上的尺码和数量显示为NULL
-------要得到的查询结果
/*
Num 系统单号 系统行号 系统款号 箱号 颜色 尺码 数量
----------------------------------------------
1    662    16030    15761    662#16030    白色    215    1.00000000
2    662    16030    15761    662#16030    白色    220    1.00000000
3    662    16030    15761    662#16030    白色    225    2.00000000
4    662    16030    15761    662#16030    白色    230    1.00000000
5    662    16030    15761    662#16030    白色    235    1.00000000
6    662    16030    15761    662#16030    白色    240    NULL
7    662    16030    15761    662#16030    白色    245    NULL
8    662    16030    15761    662#16030    白色    250    NULL
9    662    16030    15761    662#16030    白色    NULL   NULL
10   662    16030    15761    662#16030    白色    NULL   NULL
1    662    16031    15762    662#16031    白色    21     1.00000000
2    662    16031    15762    662#16031    白色    22     2.00000000
3    662    16031    15762    662#16031    白色    23     3.00000000
4    662    16031    15762    662#16031    白色    24     NULL
5    662    16031    15762    662#16031    白色    25     NULL
6    662    16031    15762    662#16031    白色    NULL   NULL
7    662    16031    15762    662#16031    白色    NULL   NULL
8    662    16031    15762    662#16031    白色    NULL   NULL
9    662    16031    15762    662#16031    白色    NULL   NULL
10   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 table1
end
GO

CREATE TABLE [table1] (
    [系统单号] [int] NOT NULL ,
    [系统行号] [int] NULL ,
    [系统款号] [int] NULL ,
    [箱号] [varchar] (6000) COLLATE Chinese_PRC_CI_AS NUL