| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1069 人关注过本帖
标题:碰到两个小题,大家帮想下
取消只看楼主 加入收藏
accpfriend
Rank: 3Rank: 3
等 级:论坛游侠
威 望:5
帖 子:167
专家分:102
注 册:2006-12-31
结帖率:0
收藏
 问题点数:0 回复次数:5 
碰到两个小题,大家帮想下
-------------------------第一题
列1 列2 列3
aa Ha 0
bb GG 0
aa Ha 1
cc Ma 0
bb GG 1
aa Ha a
cc Ma a
bb GG 0
当 列1,列2字段值都相同的情况下,并且列3中在此表中同时存在0,1,a 则抛弃 0 , 1 记录 只留下 a 记录 但当 列3中 只要不是同时存在 0, 1, a 则不作变动 不知道我说明白了吧,我给出我所要的结果吧

列1 列2 列3
bb GG 0
cc Ma 0 ----
bb GG 1
aa Ha a
cc Ma a ----- cc Ma 这条记录因为没有列3同时存在 0 ,1, a 所在没有变动,同样 bb GG 也是一样
bb GG 0

----------------第二题
有表A
ID NAME ScorID Fengxu
1 张三 001 50
2 李四 005 90
3 张三 004 52
4 王二 003 25
5 麻子 002 62
6 李四 001 21
有表B
ID ScName
001 英语
002 数学
003 物理
004 化学
005 理工
想要得到如下记录
name ScName fenXu
张三
英语 50
化学 52
李四
理工 90
英语 21
王二
物理 25
麻子
数学 62

大家帮想下.

[此贴子已经被作者于2007-2-9 14:57:44编辑过]

搜索更多相关主题的帖子: 记录 
2007-02-09 14:42
accpfriend
Rank: 3Rank: 3
等 级:论坛游侠
威 望:5
帖 子:167
专家分:102
注 册:2006-12-31
收藏
得分:0 
测试下,下周再说
2007-02-09 17:35
accpfriend
Rank: 3Rank: 3
等 级:论坛游侠
威 望:5
帖 子:167
专家分:102
注 册:2006-12-31
收藏
得分:0 

什么呀全测试通不过,
给正确答案
====
drop table table1
go
CREATE TABLE Table1
(
COL1 VARCHAR(10),
COL2 VARCHAR(10),
COL3 VARCHAR(10)
)
go
INSERT INTO Table1
SELECT 'aa','Ha','0' UNION ALL
SELECT 'bb','GG','0' UNION ALL
SELECT 'aa','Ha','1' UNION ALL
SELECT 'cc','Ma','0' UNION ALL
SELECT 'bb','GG','1' UNION ALL
SELECT 'aa','Ha','a' UNION ALL
SELECT 'cc','Ma','a' UNION ALL
SELECT 'bb','GG','0'
go

SELECT * FROM Table1 WHERE COL1+COL2 IN(
SELECT COL1+COL2 FROM Table1 GROUP BY COL1,COL2 HAVING COUNT(1)<>3 OR (COUNT(1)=3 AND MAX(COL3)<>'a'))
UNION ALL
SELECT COL1,COL2,'a' COL3 FROM Table1 GROUP BY COL1,COL2 HAVING COUNT(1)=3 AND MAX(COL3)='a'
-----------------================================================
drop table A,B
go
CREATE TABLE A
(
ID INT,
NAME VARCHAR(10),
ScorID VARCHAR(10),
Fengxu INT
)
go
CREATE TABLE B
(
ID VARCHAR(10),
ScName VARCHAR(10)
)
go

INSERT INTO A
SELECT 1,'张三','001',50 UNION ALL
SELECT 2,'李四','005',90 UNION ALL
SELECT 3,'张三','004',52 UNION ALL
SELECT 4,'王二','003',25 UNION ALL
SELECT 5,'麻子','002',62 UNION ALL
SELECT 6,'李四','001',21
go
INSERT INTO B
SELECT '001','英语' UNION ALL
SELECT '002','数学' UNION ALL
SELECT '003','物理' UNION ALL
SELECT '004','化学' UNION ALL
SELECT '005','理工'
go
select * from A
select * from B
go
select case when grouping(ScorID)=0 then ''else + end 名,
isnull((select ScName from b b where b.id=a.ScorID),'') 课,
case when grouping(ScorID)=1 then ''else cast(sum(Fengxu)as varchar(10)) end 分
from a a group by name,ScorID WITH ROLLUP having grouping(name)=0
order by name,case when ScorID is null then '001' else name end
go

2007-02-28 13:51
accpfriend
Rank: 3Rank: 3
等 级:论坛游侠
威 望:5
帖 子:167
专家分:102
注 册:2006-12-31
收藏
得分:0 
晕,不可能
2007-03-01 09:05
accpfriend
Rank: 3Rank: 3
等 级:论坛游侠
威 望:5
帖 子:167
专家分:102
注 册:2006-12-31
收藏
得分:0 

棉花糖ONE 这就是你给的结果测试的答案,不只是排序错误,完全就是另一会事,数据都不全

drop table A,B
go
CREATE TABLE A
(
ID INT,
NAME VARCHAR(10),
ScorID VARCHAR(10),
Fengxu INT
)
go
CREATE TABLE B
(
ID VARCHAR(10),
ScName VARCHAR(10)
)
go

INSERT INTO A
SELECT 1,'张三','001',50 UNION ALL
SELECT 2,'李四','005',90 UNION ALL
SELECT 3,'张三','004',52 UNION ALL
SELECT 4,'王二','003',25 UNION ALL
SELECT 5,'麻子','002',62 UNION ALL
SELECT 6,'李四','001',21
go
INSERT INTO B
SELECT '001','英语' UNION ALL
SELECT '002','数学' UNION ALL
SELECT '003','物理' UNION ALL
SELECT '004','化学' UNION ALL
SELECT '005','理工'
go
select
(case when A.id in (select max(id) from A group by A.name)
then name else ''end) as name ,B.ScName,A.fengxu from A
inner join B on B.id=A.ScorID

name ScName fengxu
---------- ---------- -----------
英语 50
理工 90
张三 化学 52
王二 物理 25
麻子 数学 62
李四 英语 21

(6 行受影响)

2007-03-01 09:28
accpfriend
Rank: 3Rank: 3
等 级:论坛游侠
威 望:5
帖 子:167
专家分:102
注 册:2006-12-31
收藏
得分:0 
order by name,case when ScorID is null then '001' else name end --这句帮解释下

select case when grouping(ScorID)=0 then ''else name end 名,
isnull((select ScName from b b where b.id=a.ScorID),'') 课,
case when grouping(ScorID)=1 then ''else cast(sum(Fengxu)as varchar(10)) end 分
from a a group by name,ScorID WITH ROLLUP having grouping(name)=0
order by name,case when ScorID is null then '001' else name end

这整个语句我都还不太理解
帮助详解下
2007-03-02 08:48
快速回复:碰到两个小题,大家帮想下
数据加载中...
 
   



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

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