两个比较特殊的SQL文实现

对数据库中的数据,我们在现实的时候经常会有一些比较特殊的要求,

例如 出报表的时候,需要把本来是3列的数据,按照不同的条数变成柳列来显示,如果用程序来实现这样的功能,一般都比较繁琐,并且效率也不是很高,如果使用SQL语句来完成的话,那么数据在一出来的时候就是我们想要的格式,岂不是很好。

下面就是两个比较特殊的实现

原始数据和表的结构如下

namestunosex
張三001
李四 002 
張艷 003 
王一 004 
王二 005 
王艷 006 

第一种实现,我们需要把一行数据变成两行,变成

张三

这样我们就可以在程序中用两行或者是个多的行,来表示数据库中的一条数据,这个方法在数据库中数据字段比较多的时候,可以用一个GRID来显示,实现的SQL语句如下:

 


 

select stuno,name from
(
select * from (select top 10000 stuno,[name],1 as [no] from tblStudent order by stuno) T
union all
select * from (select top 10000 stuno,[sex] as [name],2 as [no]  from tblStudent order by stuno) T
) F
ORDER BY stuno,[no]

 


 

stunoname
001 張三
001 
002 李四
002 
003 張艷
003 
004 王一
004 
005 王二
005 
006 王艷
006 

 

第二种实现方法,将数据变成6列来表示

SELECT TOP 1 * from tblStudent A
LEFT JOIN (SELECT TOP 1 * FROM tblStudent WHERE (stuno NOT IN (SELECT TOP 2 stuno FROM tblStudent B))) D ON 1=1
LEFT JOIN (SELECT TOP 1 * FROM tblStudent WHERE (stuno NOT IN (SELECT TOP 4 stuno FROM tblStudent B))) E ON 1=1
UNION
SELECT TOP 1 * from tblStudent A
LEFT JOIN (SELECT TOP 1 * FROM tblStudent WHERE (stuno NOT IN (SELECT TOP 3 stuno FROM tblStudent B))) D ON 1=1
LEFT JOIN (SELECT TOP 1 * FROM tblStudent WHERE (stuno NOT IN (SELECT TOP 5 stuno FROM tblStudent B))) E ON 1=1
WHERE A.stuno not in (SELECT TOP 1 stuno from tblStudent)

实现后的大致效果如下:

張三001李四002
張艷003王二005

这两种方法,对于一些特殊要求的数据形式比较有用,希望可以对大家有所帮助。

实现环境:WinXP SP2

                  SQL Server 2000 Developer 


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值