现有两个表
1、表名:dic 字段名称及记录内容:
省市    区县      金额
北京    无        100
天津    无        110
河北    石家庄    90
河北    邯郸      80
河北    邢台      702、表名 list  字段名称及记录内容
人员编号    姓名  省市    区县
1         张三   北京    东城
2         李四   北京    西城
3         人员3  天津   塘沽
4         人员4  河北   石家庄
5         人员5  河北   邯郸
6         人员6  河北   邢台
7         人员7  河北   邢台所要结果:
人员编号    姓名  省市    区县    金额
1         张三   北京    东城   100
2         李四   北京    西城   100
3         人员3  天津   塘沽    110
4         人员4  河北   石家庄  90
5         人员5  河北   邯郸    80
6         人员6  河北   邢台    70
7         人员7  河北   邢台    70
怎么写呢?

解决方案 »

  1.   

    sELECT 人员编号   , 姓名 , 省市 ,   区县 ,   金额  FROM 表1 a inner join 表2 b on a. 省市    =b. 省市    where b.区县='無' OR a.区县=b.区县
      

  2.   

    select * from list a ,dic b 
    where a.省市=b.省市
      

  3.   

    SELECT LIST.人员编号,LIST.姓名,LIST.省市,LIST.区县,DIC.金额 
    FROM LIST,DIC
    WHERE LIST.省市=DIC.省市
    AND (LIST.区县=DIC.区县
    OR DIC.区县 = '无')
      

  4.   

    select a.* , b.金额 from list a , dic b where a.省市 = b.省市 
      

  5.   

    create table #dic
    (
    省市 varchar(10),
    区县 varchar(10),
    金额 int
    )create table #list
    (
    人员编号 int,
    姓名 varchar(10),
    省市 varchar(10),
    区县 varchar(10)
    ) insert into #dic select '北京',    '无',        100 
    insert into #dic select '天津',    '无' ,       110 
    insert into #dic select '河北',    '石家庄' ,   90 
    insert into #dic select '河北',    '邯郸' ,     80 
    insert into #dic select '河北',    '邢台'  ,    70 insert into #list select 1,        '张三',  '北京',    '东城'
    insert into #list select 2,        '李四',  '北京',    '西城'
    insert into #list select 3,        '人员3',  '天津',  '塘沽'
    insert into #list select 4,        '人员4',  '河北',  '石家庄'
    insert into #list select 5,        '人员5', '河北' , '邯郸'
    insert into #list select 6,        '人员6',  '河北' , '邢台'
    insert into #list select 7,        '人员7',  '河北',  '邢台'
    select b.人员编号,b.姓名,b.省市,b.区县,a.金额
    from #dic a inner join #list b on a.省市 = b.省市 
                    and (a.区县 =  b.区县 or a.区县 = '无')/*
    人员编号        姓名         省市         区县         金额
    ----------- ---------- ---------- ---------- -----------
    1           张三         北京         东城         100
    2           李四         北京         西城         100
    3           人员3        天津         塘沽         110
    4           人员4        河北         石家庄        90
    5           人员5        河北         邯郸         80
    6           人员6        河北         邢台         70
    7           人员7        河北         邢台         70(7 行受影响)
    */
      

  6.   

    SET NOCOUNT ON
    --1、表名:dic 字段名称及记录内容: 
    if object_id('dic')is not null drop table dic
    go
    create table dic(省市 nvarchar(10),    区县 nvarchar(10),      金额  int)
    insert dic select N'北京'  ,  N'无',        100 
    insert dic select N'天津'  ,  N'无' ,       110 
    insert dic select N'河北' ,   N'石家庄',    90 
    insert dic select N'河北',    N'邯郸'     , 80 
    insert dic select N'河北',    N'邢台'      ,70 
    if object_id('LIST')is not null drop table LIST
    go
    --2、表名 list  字段名称及记录内容 
    CREATE TABLE LIST(人员编号 INT,    姓名 NVARCHAR(10), 省市 NVARCHAR(10),    区县 NVARCHAR(10)) 
    INSERT LIST SELECT 1     ,   N'张三' , N'北京'    ,N'东城' 
    INSERT LIST SELECT 2    ,    N'李四' , N'北京'    ,N'西城' 
    INSERT LIST SELECT 3   ,     N'人员3'  ,N'天津'  ,N'塘沽' 
    INSERT LIST SELECT 4  ,      N'人员4'  ,N'河北'  ,N'石家庄' 
    INSERT LIST SELECT 5 ,       N'人员5'  ,N'河北' , N'邯郸' 
    INSERT LIST SELECT 6 ,       N'人员6'  ,N'河北' , N'邢台' 
    INSERT LIST SELECT 7,        N'人员7' , N'河北',  N'邢台' 
    select b.人员编号,b.姓名,b.省市,b.区县,a.金额
    from dic a , list b WHERE  a.省市 = b.省市 and (a.区县 =  b.区县 or a.区县 = N'无')
    /*人员编号        姓名         省市         区县         金额          
    ----------- ---------- ---------- ---------- ----------- 
    1           张三         北京         东城         100
    2           李四         北京         西城         100
    3           人员3        天津         塘沽         110
    4           人员4        河北         石家庄        90
    5           人员5        河北         邯郸         80
    7           人员7        河北         邢台         70
    6           人员6        河北         邢台         70
    */
      

  7.   

    create table dic(省市 varchar(10),   区县 varchar(10),     金额 int)
    insert into dic values('北京' ,   '无'     ,   100 )
    insert into dic values('天津' ,   '无'     ,   110 )
    insert into dic values('河北' ,   '石家庄' ,   90  )
    insert into dic values('河北' ,   '邯郸'   ,   80  )
    insert into dic values('河北' ,   '邢台'   ,   70  )
    create table list(人员编号 int,   姓名 varchar(10), 省市  varchar(10),  区县 varchar(10))
    insert into list values(1 ,       '张三'  , '北京' , '东城') 
    insert into list values(2 ,       '李四'  , '北京' , '西城') 
    insert into list values(3 ,       '人员3' , '天津' , '塘沽') 
    insert into list values(4 ,       '人员4' , '河北' , '石家庄') 
    insert into list values(5 ,       '人员5' , '河北' , '邯郸') 
    insert into list values(6 ,       '人员6' , '河北' , '邢台') 
    insert into list values(7 ,       '人员7' , '河北' , '邢台')
    goselect a.* , isnull((select 金额 from dic b where b.省市 = a.省市 and b.区县 = a.区县), (select top 1 金额 from dic b where b.省市 = a.省市)) 金额 from list adrop table dic , list /*
    人员编号        姓名         省市         区县         金额          
    ----------- ---------- ---------- ---------- ----------- 
    1           张三         北京         东城         100
    2           李四         北京         西城         100
    3           人员3        天津         塘沽         110
    4           人员4        河北         石家庄        90
    5           人员5        河北         邯郸         80
    6           人员6        河北         邢台         70
    7           人员7        河北         邢台         70(所影响的行数为 7 行)
    */
      

  8.   

    sELECT a.人员编号  , a.姓名 , a.省市 ,  a.区县 , b.金额  FROM list a inner join dic b on a. 省市    =b. 省市    where b.区县='無' OR a.区县=b.区县