职工号 姓名            缺勤时间     缺勤天数 缺勤类型 请假人
1 李华       2007-02-03 00:00:00.000 3 1 1
2 张敏       2007-02-12 00:00:00.000 2 2 3
3 付丽       2007-03-03 00:00:00.000 5 3 NULL
4 张晓华     2007-03-10 00:00:00.000 2 1 1
5 邓刚       2007-03-16 00:00:00.000 1 2 5要求1、列出缺勤类型为1的员工中缺勤天数最多的员工的姓名
    2、列出缺勤类型及每种类型中缺勤员工的信息,若没有该类型的缺勤员工则只列出该种缺勤类型
谢谢帮忙了~~~~顺便 告诉一下   这类题的主要思想是什么~~~

解决方案 »

  1.   

    select top 1 姓名 from tb where 缺勤类型=1 order by 缺勤天数 desc/*测试结果姓名
    -------------
    李华   (1 行受影响)
    */
      

  2.   

    --------------------SQL Server数据格式化工具-------------------
    ---------------------------------------------------------------
    -- DESIGNER :happycell188(喜喜)
    --       QQ :584738179
    -- Development Tool :Microsoft Visual C++ 6.0    C Language 
    -- FUNCTION :CONVERT DATA TO T-SQL
    ---------------------------------------------------------------
    -- Microsoft SQL Server  2005
    -- Developer Edition on Microsoft Windows XP [版本 5.1.2600]
    ---------------------------------------------------------------
    ---------------------------------------------------------------use test
    go
    if object_id('test.dbo.tb') is not null drop table tb
    -- 创建数据表
    create table tb
    (
    职工号 int,
    姓名 char(7),
    缺勤时间 datetime,
    缺勤天数 int,
    缺勤类型 int,
    请假人 int
    )
    go
    --插入测试数据
    insert into tb select 1,'李华','2007-02-03 00:00:00.000',3,1,1
    union all select 2,'张敏','2007-02-12 00:00:00.000',2,2,3
    union all select 3,'付丽','2007-03-03 00:00:00.000',5,3,NULL
    union all select 4,'张晓华','2007-03-10 00:00:00.000',2,1,1
    union all select 5,'邓刚','2007-03-16 00:00:00.000',1,2,5
    go
    --代码实现select top 1 姓名 from tb where 缺勤类型=1 order by 缺勤天数 desc/*测试结果姓名
    -------------
    李华   (1 行受影响)
    */'貌似是这样的,但的确没有什么实际意义!'select tt.缺勤类型,t.职工号,姓名,缺勤时间,缺勤天数,请假人
    from tb t right join (
    select * from (select distinct 职工号 from tb)a
    cross join (select distinct 缺勤类型 from tb)b )tt
    on t.职工号=tt.职工号 and t.缺勤类型=tt.缺勤类型/*测试结果缺勤类型 职工号   姓名     缺勤时间                    缺勤天数 请假人
    ----------------------------------------------------------------------
    1 1 李华    2007-02-03 00:00:00.000 3 1
    1 NULL NULL NULL                 NULL NULL
    1 NULL NULL NULL                 NULL NULL
    1 4 张晓华  2007-03-10 00:00:00.000 2 1
    1 NULL NULL NULL                 NULL NULL
    2 NULL NULL NULL                 NULL NULL
    2 2 张敏    2007-02-12 00:00:00.000 2 3
    2 NULL NULL NULL                 NULL NULL
    2 NULL NULL NULL                 NULL NULL
    2 5 邓刚    2007-03-16 00:00:00.000 1 5
    3 NULL NULL NULL                 NULL NULL
    3 NULL NULL NULL                 NULL NULL
    3 3 付丽    2007-03-03 00:00:00.000 5 NULL
    3 NULL NULL NULL                 NULL NULL
    3 NULL NULL NULL                 NULL NULL(15 行受影响)
    */