现有两个表
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、表名: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
怎么写呢?
where a.省市=b.省市
FROM LIST,DIC
WHERE LIST.省市=DIC.省市
AND (LIST.区县=DIC.区县
OR 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 行受影响)
*/
--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
*/
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 行)
*/