碰到两个小题,大家帮想下-------------------------第一题
列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.   

    一题:
    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 行受影响)
      

  2.   

    第二题:
    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 行受影响)
      

  3.   

    最近学了一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