有2表:
T1:
考核指标集名称 考核项目 最低分数 最高分数
优秀指标系统   学历     2         6
优秀指标系统   工龄     1         30
...
T2:
考核名称 考核指标集名称 考核项目 被考核人 得分
优秀员工  优秀指标系统    学历   AA       5
优秀员工  优秀指标系统    学历   BB       3
优秀员工  优秀指标系统    工龄   AA       12
优秀员工  优秀指标系统    工龄   BB       20
...
查询:
当被考核人=AA:此时AA在T2中是存在的
考核指标集名称 考核项目 最低分数 最高分数 被考核人 得分
优秀指标系统   学历     2         6      AA      5
优秀指标系统   工龄     1         30     AA      12
当被考核人=DD:此时DD在T2中不存在
考核指标集名称 考核项目 最低分数 最高分数 被考核人 得分
优秀指标系统   学历     2         6      DD      
优秀指标系统   工龄     1         30     DD         

解决方案 »

  1.   

    select t1.[考核指标集名称],t1.[考核项目],t1.[最低分数],t1.[最高分数],t2.[ 被考核人],t2.[得分] from t1 left join t2 on t1.[考核指标集名称]=t2.[考核指标集名称] and t1.[考核项目]=t2.[考核项目]
      

  2.   

    --> 测试数据: @T1
    declare @T1 table (考核指标集名称 varchar(12),考核项目 varchar(4),最低分数 int,最高分数 int)
    insert into @T1
    select '优秀指标系统','学历',2,6 union all
    select '优秀指标系统','工龄',1,30
    --> 测试数据: @T2
    declare @T2 table (考核名称 varchar(8),考核指标集名称 varchar(12),考核项目 varchar(4),被考核人 varchar(2),得分 int)
    insert into @T2
    select '优秀员工','优秀指标系统','学历','AA',5 union all
    select '优秀员工','优秀指标系统','学历','BB',3 union all
    select '优秀员工','优秀指标系统','工龄','AA',12 union all
    select '优秀员工','优秀指标系统','工龄','BB',20declare @被考核人 varchar(10)
    set @被考核人='DD'
    select b.考核指标集名称,b.考核项目,最低分数,b.最高分数,被考核人=@被考核人,a.得分 from @T2 a right join @t1 b on  a.考核项目=b.考核项目
    and 被考核人=@被考核人
      

  3.   

    select t1.* , t2.被考核人 ,t2.得分
    from t1 left join t2
    on t1.考核项目 = t2.考核项目 
    where t2.被考核人 = 'AA'
      

  4.   


    SET ANSI_NULLS ON
    GO
    SET QUOTED_IDENTIFIER OFF
    GO
    if object_id('P') is not null
       drop procedure P
    go
    create procedure P
    ( @考核人 varchar(10))
    as 
    set nocount on
    declare @T1 table (考核指标集名称 varchar(20),考核项目 varchar(10),最低分数 int,最高分数 int)
    insert into @T1 select '优秀指标系统','学历',2,6
         union all  select '优秀指标系统','工龄',1,30
    declare @T2 table (考核名称 varchar(10),优秀指标系统 varchar(20),考核项目 varchar(10),被考核人 varchar(10),得分 int)
    insert into @t2 select '优秀员工','优秀指标系统','学历','AA',5
          union all select '优秀员工','优秀指标系统','学历','BB',3
          union all select '优秀员工','优秀指标系统','工龄','AA',12
          union all select '优秀员工','优秀指标系统','工龄','BB',20
    if exists(select * from @t2 where 被考核人=@考核人)
      select 考核指标集名称,a.考核项目,最低分数,最高分数,被考核人,得分
        from @t1 a join @t2 b on a.考核项目=b.考核项目 where 被考核人=@考核人
    else 
      select * from @t1
    set nocount off
    exec p 'dd'
      

  5.   


    create procedure P
    ( @考核人 varchar(10))
    as 
    set nocount on
    declare @T1 table (考核指标集名称 varchar(20),考核项目 varchar(10),最低分数 int,最高分数 int)
    insert into @T1 select '优秀指标系统','学历',2,6
         union all  select '优秀指标系统','工龄',1,30
    declare @T2 table (考核名称 varchar(10),优秀指标系统 varchar(20),考核项目 varchar(10),被考核人 varchar(10),得分 int)
    insert into @t2 select '优秀员工','优秀指标系统','学历','AA',5
          union all select '优秀员工','优秀指标系统','学历','BB',3
          union all select '优秀员工','优秀指标系统','工龄','AA',12
          union all select '优秀员工','优秀指标系统','工龄','BB',20
    if exists(select * from @t2 where 被考核人=@考核人)
      select 考核指标集名称,a.考核项目,最低分数,最高分数,被考核人,得分
        from @t1 a join @t2 b on a.考核项目=b.考核项目 where 被考核人=@考核人
    else 
      select * from @t1
    set nocount off
    go
    exec p 'dd'
      

  6.   

    CREATE TABLE #A (S_NAME VARCHAR(20),C_NAME VARCHAR(20),L_NUM FLOAT ,H_NUM FLOAT)INSERT INTO #A SELECT 'S1','XUELI',2,6
    INSERT INTO #A SELECT 'S1','GONGLING',1,30CREATE TABLE #B (T_NAE VARCHAR(20),S_NAME VARCHAR(20),C_NAME VARCHAR(20),ATTN_NAME VARCHAR(20),S_NUM FLOAT)
    INSERT INTO #B SELECT 'T1','S1','XUELI','AA',5
    INSERT INTO #B SELECT 'T1','S1','XUELI','BB',3
    INSERT INTO #B SELECT 'T1','S1','GONGLING','AA',12
    INSERT INTO #B SELECT 'T1','S1','GONGLING','BB',20DECLARE @ATTN_NAME VARCHAR(20)
    SET @ATTN_NAME='AA'SELECT A.*,@ATTN_NAME ATTN_NAE,B.S_NUM FROM #A A
    LEFT JOIN 
    (SELECT * FROM #B WHERE ATTN_NAME=@ATTN_NAME)B ON (A.S_NAME=B.S_NAME AND A.C_NAME=B.C_NAME)
    SET @ATTN_NAME='DD'SELECT A.*,@ATTN_NAME ATTN_NAE,B.S_NUM FROM #A A
    LEFT JOIN 
    (SELECT * FROM #B WHERE ATTN_NAME=@ATTN_NAME)B ON (A.S_NAME=B.S_NAME AND A.C_NAME=B.C_NAME)DROP TABLE #A
    DROP TABLE #B/**
    S1 XUELI 2.0 6.0 AA 5.0
    S1 GONGLING 1.0 30.0 AA 12.0
    /***
    S1 XUELI 2.0 6.0 DD NULL
    S1 GONGLING 1.0 30.0 DD NULL