日期:2014-05-16  浏览次数:20580 次

sql语句查询的时候能插入空行吗?
select * from table order by name

name score
张三 213
张三 32
李四 32
李四 54
李四 321
王小三 2
王小三 32
王小三 32

我按照name分组之后,能否遇到不同的name时自动插入一个空行?

name score
张三 213
张三 32

李四 32
李四 54
李四 321

王小三 2
王小三 32
王小三 32
------解决方案--------------------
if not object_id('tb') is null
drop table tb
Go
Create table tb([name] nvarchar(3),[score] int)
Insert tb
select N'张三',213 union all
select N'张三',32 union all
select N'李四',32 union all
select N'李四',54 union all
select N'李四',321 union all
select N'王小三',2 union all
select N'王小三',32 union all
select N'王小三',32
Go
;with tmp1
as
(
select rownum=row_number()over(partition by [name] order by getdate()),
       *
from tb
),tmp2
as(
select b.name,
       row_number()over(partition by b.name order by (getdate()))rownum,
       null col1,
       null col2
from master..spt_values a
,
(select [name],
        count(*)+1 px
 from tb
 group by [Name])b
where a.type='P' and number<b.px )
select a.name,
       a.Score
from tmp2 b left join tmp1 a
on a.rownum=b.rownum and a.name=b.name
/*
name Score
---- -----------
王小三  2
王小三  32
王小三  32
NULL NULL
李四   32
李四   54
李四   321
NULL NULL
张三   213
张三   32
NULL NULL

(11 row(s) affected)
*/