| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1425 人关注过本帖
标题:急急急!!!!!!!!!!!!怎么都不好实现······
只看楼主 加入收藏
ldcr
Rank: 1
来 自:北京
等 级:新手上路
帖 子:59
专家分:0
注 册:2007-4-24
收藏
 问题点数:0 回复次数:10 
急急急!!!!!!!!!!!!怎么都不好实现······
表 xxx

id    nid    zi    dan    yu
1    1    a    1.2    2.0
2    1    b    1.3    2.1
3    1    c    2.0    2.5
4    2    a    1.2    2.2
5    2    d    1.3    2.0
6    3    a    1.2    3.0
7    3    b    1.3    2.5


需要的结果:

nid    zi    dan       yu
1    a    1.2    2.0  2.2  3.0
1    b    1.3    2.1  2.5
1    c    2.0    2.5

各位大侠帮帮忙啊,小弟在这先谢了
2007-12-03 21:23
ldcr
Rank: 1
来 自:北京
等 级:新手上路
帖 子:59
专家分:0
注 册:2007-4-24
收藏
得分:0 
大家快来帮忙啊 ~~~~

我是个很笨的人,希望能在这里和大家一起交流、一起进步!
2007-12-03 21:24
XieLi
Rank: 1
等 级:新手上路
威 望:1
帖 子:762
专家分:0
注 册:2007-7-24
收藏
得分:0 
后成NID为2,3的都不要出来吗?

拥有蓝天的白云,拥有你的我.
2007-12-04 08:27
XieLi
Rank: 1
等 级:新手上路
威 望:1
帖 子:762
专家分:0
注 册:2007-7-24
收藏
得分:0 
有一点复杂


/*表 xxx

id        nid        zi        dan        yu
1        1        a        1.2        2.0
2        1        b        1.3        2.1
3        1        c        2.0        2.5
4        2        a        1.2        2.2
5        2        d        1.3        2.0
6        3        a        1.2        3.0
7        3        b        1.3        2.5


需要的结果:

nid        zi        dan           yu
1        a        1.2        2.0  2.2  3.0
1        b        1.3        2.1  2.5
1        c        2.0        2.5*/
--创建临时表
CREATE TABLE #TTT (ZI VARCHAR(10),DAN VARCHAR(10) ,YU VARCHAR(100))
--
---
DECLARE @XXX TABLE(ID INT,NID INT,ZI VARCHAR(10),DAN VARCHAR(10) ,YU VARCHAR(10))

INSERT INTO @XXX SELECT  1,1 ,'a',1.2, 2.0
UNION SELECT 2,1, 'b' ,1.3,2.1
UNION SELECT 3,1,'c', 2.0 ,2.5
UNION SELECT 4,2,'a',1.2,2.2
UNION SELECT 5,2,'d',1.3,2.0
UNION SELECT 6,3,'a',1.2,3.0
UNION SELECT 7,3,'b',1.3,2.5
----
--删除临时表的资料
DELETE  FROM #TTT
--

--声明变量
DECLARE @ZI VARCHAR(10),@ZI1 VARCHAR(10),@DAN VARCHAR(50),@YU VARCHAR(50),@YU1 VARCHAR(50)
SET @YU1=''
---

--用游标

DECLARE CURSOR2 CURSOR  FOR SELECT DISTINCT ZI FROM @XXX
     OPEN CURSOR2
        FETCH NEXT FROM CURSOR2 INTO  @ZI
             WHILE @@FETCH_STATUS=0
                     BEGIN
                     DECLARE CURSOR3 CURSOR  FOR SELECT ZI,DAN,YU FROM @XXX WHERE ZI=@ZI
                         OPEN CURSOR3
                         FETCH NEXT FROM CURSOR3 INTO @ZI1,@DAN,@YU
                                   WHILE @@FETCH_STATUS=0
                                        BEGIN
                                        SET @YU1=@YU1 +' '+ @YU
                                        FETCH NEXT FROM CURSOR3 INTO @ZI1,@DAN,@YU
                              END
                                      INSERT INTO #TTT SELECT @ZI,@DAN,@YU1
                         SET @YU1=''
                         CLOSE CURSOR3
                         DEALLOCATE CURSOR3
                           FETCH NEXT FROM CURSOR2 INTO  @ZI   
               END

        CLOSE CURSOR2
        DEALLOCATE CURSOR2


--最后的结果
SELECT B.NID, A.*  FROM (SELECT * FROM  #TTT) A, @XXX B WHERE A.ZI=B.ZI  AND  B.NID=1

[[italic] 本帖最后由 XieLi 于 2007-12-4 09:41 编辑 [/italic]]

拥有蓝天的白云,拥有你的我.
2007-12-04 09:37
purana
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:广东-广州
等 级:版主
威 望:66
帖 子:6039
专家分:0
注 册:2005-6-17
收藏
得分:0 
使用到游标?.太复杂了.写个函数就可以实现了.

CREATE TABLE XXX(
ID INT,
NID INT,
ZI VARCHAR(10),
DAN VARCHAR(10) ,
YU VARCHAR(10))

GO
INSERT INTO XXX SELECT  1,1 ,'a',1.2, 2.0
UNION SELECT 2,1, 'b' ,1.3,2.1
UNION SELECT 3,1,'c', 2.0 ,2.5
UNION SELECT 4,2,'a',1.2,2.2
UNION SELECT 5,2,'d',1.3,2.0
UNION SELECT 6,3,'a',1.2,3.0
UNION SELECT 7,3,'b',1.3,2.5

GO
CREATE FUNCTION dbo.GetData(@ZI VARCHAR(10))
    RETURNS VARCHAR(1000)
AS
BEGIN
    DECLARE @STR VARCHAR(1000)
    SET @STR=''
    SELECT @STR=@STR+YU+' ' FROM XXX WHERE ZI=@ZI
    RETURN @STR
END
GO

SELECT A.NID,A.ZI,B.DAN,YU=dbo.GetData(A.ZI)
FROM
(
    SELECT * FROM XXX WHERE NID=1
) A

INNER JOIN
(
    SELECT ZI,MIN(DAN) DAN FROM XXX GROUP BY ZI
) B
ON A.ZI=B.ZI AND A.DAN=B.DAN

DROP FUNCTION GetData
DROP TABLE XXX


/*
NID         ZI         DAN       YU                                             
----------- ---------- ---------- ------
1           a          1.2        2.0 2.2 3.0
1           b          1.3        2.1 2.5
1           c          2.0        2.5
(所影响的行数为 3 行)
*/

我的msn: myfend@
2007-12-04 10:28
lodhppve
Rank: 1
来 自:bj
等 级:新手上路
帖 子:32
专家分:0
注 册:2007-12-4
收藏
得分:0 
厉害! 学习了!

同朋友们一起成长!!我的msn是: lodhppve@
2007-12-04 10:46
ldcr
Rank: 1
来 自:北京
等 级:新手上路
帖 子:59
专家分:0
注 册:2007-4-24
收藏
得分:0 
恩,谢谢purana 仁兄了,问题搞定
也谢谢 XieLi !!
谢谢各位

我是个很笨的人,希望能在这里和大家一起交流、一起进步!
2007-12-04 10:48
XieLi
Rank: 1
等 级:新手上路
威 望:1
帖 子:762
专家分:0
注 册:2007-7-24
收藏
得分:0 
是哦!我怎么就想得那么复杂呢!

拥有蓝天的白云,拥有你的我.
2007-12-04 10:57
ldcr
Rank: 1
来 自:北京
等 级:新手上路
帖 子:59
专家分:0
注 册:2007-4-24
收藏
得分:0 
比我强多了
不过以前没有学会用Sql 函数,没有想到函数有这么多的好处

我是个很笨的人,希望能在这里和大家一起交流、一起进步!
2007-12-04 14:26
madpbpl
Rank: 4
等 级:贵宾
威 望:11
帖 子:2876
专家分:244
注 册:2007-4-5
收藏
得分:0 
没看懂,不理解函数的作用,还有不知道A、B怎么出来的,搜索资料继续学习。
2007-12-04 17:25
快速回复:急急急!!!!!!!!!!!!怎么都不好实现······
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.049009 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved