碰到两个小题,大家帮想下-------------------------第一题
列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大家帮想下.
列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大家帮想下.
CREATE TABLE Table1
(
COL1 VARCHAR(10),
COL2 VARCHAR(10),
COL3 VARCHAR(10)
)
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' 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'
--
COL1 COL2 COL3
---------- ---------- ----------
bb GG 0
cc Ma 0
bb GG 1
cc Ma a
bb GG 0
aa Ha a(6 行受影响)
CREATE TABLE A
(
ID INT,
NAME VARCHAR(10),
ScorID VARCHAR(10),
Fengxu INT
)
CREATE TABLE B
(
ID VARCHAR(10),
ScName VARCHAR(10)
)
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 INSERT INTO B
SELECT '001','英语' UNION ALL
SELECT '002','数学' UNION ALL
SELECT '003','物理' UNION ALL
SELECT '004','化学' UNION ALL
SELECT '005','理工' SELECT CASE ScName WHEN '' THEN NAME ELSE '' END NAME,ScName,Fengxu
FROM
(
SELECT NAME,NAME NAME2,ScName,Fengxu FROM
(
SELECT DISTINCT NAME,'' ScName ,0 Fengxu FROM A UNION ALL
SELECT A.NAME,B.ScName,A.Fengxu FROM A INNER JOIN B ON A.ScorID=B.ID) C )D
ORDER BY D.NAME2,D.Fengxu
--------
NAME ScName Fengxu
---------- ---------- -----------
李四 0
英语 21
理工 90
麻子 0
数学 62
王二 0
物理 25
张三 0
英语 50
化学 52(10 行受影响)
CREATE TABLE A
(
ID INT,
NAME VARCHAR(10),
ScorID VARCHAR(10),
Fengxu INT
)
CREATE TABLE B
(
ID VARCHAR(10),
ScName VARCHAR(10)
)
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 INSERT INTO B
SELECT '001','英语' UNION ALL
SELECT '002','数学' UNION ALL
SELECT '003','物理' UNION ALL
SELECT '004','化学' UNION ALL
SELECT '005','理工'
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