首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 数据库 > SQL Server >

SQL两小题^

2012-01-19 
SQL两小题请教大家^^^^^^^^^^^^^^^^^^^碰到两个小题,大家帮想下-------------------------第一题列1列2列3

SQL两小题请教大家^^^^^^^^^^^^^^^^^^^
碰到两个小题,大家帮想下-------------------------第一题
列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 行受影响)
[解决办法]
最近学了一grouping~~有趣~~
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

热点排行