·天新网首页·加入收藏·设为首页
首页|笔记本|手机|数码相机|摄像机|MP3/MP4|主板|内存|显示器|办公|打印机|下载|开发|学院|汽车|业界
硬件|台式机|数码|数字家庭|投影仪|GPS/CPU|显卡|硬盘|服务器|网络|一体机|驱动|源码|考试|游戏|通信
实例讲解一个不用游标就可以实现的问题
http://dev.21tx.com 2008年01月23日 赛迪网 30963

问题假如有两个表a(aid,bid),b(bid,bname,bprice)

a的字段表示顾客ID和商品ID,一个顾客可以买多种商品

现在a有记录:

1,10
1,11
1,12
2,10
2,13

b的字段表示商品ID,商品名称,商品价格

现在b有记录:

10,aaa,1
11,bbb,2
12,ccc,3
13,ddd,4

现在要实现显示顾客买的商品名称和价钱即字段:

aid,bname,bprice

但是同一个顾客只保留一个ID,其他为null

应当如何实现?

即将上面的记录实现为以下内容:

1,aaa,1
,bbb,2
,ccc,3
2,aaa,1
,ddd,4

以上这个示例如果不用游标有办法实现吗?

具体解决方法如下:

CREATE TABLE #T1(aid int ,bid int)
INSERT INTO #T1
SELECT 1,10 UNION ALL
SELECT 1,11 UNION ALL
SELECT 1,12 UNION ALL
SELECT 2,10 UNION ALL
SELECT 2,13
CREATE TABLE #T2(bid int,bname nvarchar(10),bprice int)
INSERT INTO #T2
SELECT 10,''aaa'',1 UNION ALL
SELECT 11,''bbb'',2 UNION ALL
SELECT 12,''ccc'',3 UNION ALL
SELECT 13,''ddd'',4
SELECT A.aid,B.bname,B.bprice INTO #T3 FROM #T1 
AS A LEFT OUTER JOIN #T2 AS B ON A.bid=B.bid
DECLARE @aid int ,@lastaid int

UPDATE #T3 SET @aid=(CASE WHEN ISNULL(@lastaid,'''') 
=aid THEN NULL ELSE aid END),aid=@aid,@lastaid=aid
SELECT * FROM #T3
DROP TABLE #T1,#T2,#T3

结果如下:

/*
1 aaa 1
NULL bbb 2
NULL ccc 3
2 aaa 1
NULL ddd 4
*/

上一篇: 教你快速解决“一个多对多”的疑难问题
下一篇: 解决SQL Server中附加数据库的出错问题

25年牵手相伴,2500台经典机型限量特供,800-858-2883手机400-884-9425

热点文章
关于我们 | 联系我们 | 广告服务 | 工作机会 | 版权声明 | 欢迎投稿 | 网站地图
Copyright © 2000-2009 , www.21tx.com , All Rights Reserved .
晨新科技 版权所有 Created by TXSite.net