| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1068 人关注过本帖
标题:碰到两个小题,大家帮想下
只看楼主 加入收藏
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
Kendy123456
Rank: 10Rank: 10Rank: 10
等 级:贵宾
威 望:62
帖 子:2720
专家分:0
注 册:2007-1-3
收藏
得分:0 
第1题我的代码明明出来的答案是对的 和你的一样 就是行的顺序变了一下

第2题出来的是不对。。。不过你贴的代码第2题根本就没法运行

2007-02-28 16:03
accpfriend
Rank: 3Rank: 3
等 级:论坛游侠
威 望:5
帖 子:167
专家分:102
注 册:2006-12-31
收藏
得分:0 
晕,不可能
2007-03-01 09:05
棉花糖ONE
Rank: 7Rank: 7Rank: 7
等 级:贵宾
威 望:32
帖 子:2987
专家分:0
注 册:2006-7-13
收藏
得分:0 

第一题我的也是对的,我自己都是运行过的,第二题我上次就说过结果都在排序错误


26403021 sql群 博客 blog./user15/81152/index.shtml
2007-03-01 09:15
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
棉花糖ONE
Rank: 7Rank: 7Rank: 7
等 级:贵宾
威 望:32
帖 子:2987
专家分:0
注 册:2006-7-13
收藏
得分:0 

晕原先,以为是排版问题,你给的语句有点问题,我帮你改了
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
go


26403021 sql群 博客 blog./user15/81152/index.shtml
2007-03-01 10:21
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
棉花糖ONE
Rank: 7Rank: 7Rank: 7
等 级:贵宾
威 望:32
帖 子:2987
专家分:0
注 册:2006-7-13
收藏
得分:0 
晕不理解也敢贴不来,去查帮助吧

26403021 sql群 博客 blog./user15/81152/index.shtml
2007-03-02 10:03
快速回复:碰到两个小题,大家帮想下
数据加载中...
 
   



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

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