create table table1(
编号 int,
产品名称 varchar(10),
定购数量 int,
金额 int)
insert into table1 select 1,'a1',100,100
insert into table1 select 1,'a2',80 ,160
insert into table1 select 1,'a3',50 ,10
insert into table1 select 2,'b1',1 ,100
insert into table1 select 2,'b2',18 ,180
create table table2(
编号 int,
产品名称 varchar(10),
交付时间 datetime,
交付数量 int)
insert into table2 select 1,'a1','2003-01-01',50
insert into table2 select 1,'a1','2004-01-01',50
方安一:
select
identity(int,1,1) as id,
a.*,
b.交付时间,
b.交付数量
into
table89
from
table1 a
left join
table2 b
on
a.编号 = b.编号 and a.产品名称 = b.产品名称
ID 编号 产品名称 定购数量,金额 交付时间 交付数量
1 1 a1 100 100 2003-01-01 00:00:00.000 50
2 1 a1 100 100 2004-01-01 00:00:00.000 50
3 1 a2 80 160 NULL NULL
4 1 a3 50 10 NULL NULL
5 2 b1 1 100 NULL NULL
6 2 b2 18 180 NULL NULL
方案二:
select
编号=case when b.编号=a.编号 then null else a.编号 end,
产品名称=case when b.产品名称=a.产品名称 then null else a.产品名称 end,
定购数量=case when b.产品名称=a.产品名称 and b.定购数量=a.定购数量 and b.金额=a.金额 then null else a.定购数量 end,
金额=case when b.产品名称=a.产品名称 and b.定购数量=a.定购数量 and b.金额=a.金额 then null else a.金额 end,
a.交付时间,
a.交付数量
into table88
from
#t a
left join
#t b
on
a.id = b.id+1
order by
a.id
问题:
1、#t是什么意思
2、a b代表什么意思? 这个语句中没有table这样的名称
3、为什么和方案一出来的结果不一样
4、能否解释以下这是什么意思?
编号=case when b.编号=a.编号 then null else a.编号 end,
产品名称=case when b.产品名称=a.产品名称 then null else a.产品名称 end,
定购数量=case when b.产品名称=a.产品名称 and b.定购数量=a.定购数量 and b.金额=a.金额 then null else a.定购数量 end,
金额=case when b.产品名称=a.产品名称 and b.定购数量=a.定购数量 and b.金额=a.金额 then null else a.金额 end,
a.交付时间,
a.交付数量
编号 产品名称 定购数量, 金额 交付时间 交付数量
1 a1 100 100 2003-01-01 00:00:00.000 50
NULL NULL NULL NULL 2004-01-01 00:00:00.000 50
NULL a2 80 160 NULL NULL
NULL a3 50 10 NULL NULL
2 b1 1 100 NULL NULL
NULL b2 18 180 NULL NULL
编号 int,
产品名称 varchar(10),
定购数量 int,
金额 int)
insert into table1 select 1,'a1',100,100
insert into table1 select 1,'a2',80 ,160
insert into table1 select 1,'a3',50 ,10
insert into table1 select 2,'b1',1 ,100
insert into table1 select 2,'b2',18 ,180
create table table2(
编号 int,
产品名称 varchar(10),
交付时间 datetime,
交付数量 int)
insert into table2 select 1,'a1','2003-01-01',50
insert into table2 select 1,'a1','2004-01-01',50
方安一:
select
identity(int,1,1) as id,
a.*,
b.交付时间,
b.交付数量
into
table89
from
table1 a
left join
table2 b
on
a.编号 = b.编号 and a.产品名称 = b.产品名称
ID 编号 产品名称 定购数量,金额 交付时间 交付数量
1 1 a1 100 100 2003-01-01 00:00:00.000 50
2 1 a1 100 100 2004-01-01 00:00:00.000 50
3 1 a2 80 160 NULL NULL
4 1 a3 50 10 NULL NULL
5 2 b1 1 100 NULL NULL
6 2 b2 18 180 NULL NULL
方案二:
select
编号=case when b.编号=a.编号 then null else a.编号 end,
产品名称=case when b.产品名称=a.产品名称 then null else a.产品名称 end,
定购数量=case when b.产品名称=a.产品名称 and b.定购数量=a.定购数量 and b.金额=a.金额 then null else a.定购数量 end,
金额=case when b.产品名称=a.产品名称 and b.定购数量=a.定购数量 and b.金额=a.金额 then null else a.金额 end,
a.交付时间,
a.交付数量
into table88
from
#t a
left join
#t b
on
a.id = b.id+1
order by
a.id
问题:
1、#t是什么意思
2、a b代表什么意思? 这个语句中没有table这样的名称
3、为什么和方案一出来的结果不一样
4、能否解释以下这是什么意思?
编号=case when b.编号=a.编号 then null else a.编号 end,
产品名称=case when b.产品名称=a.产品名称 then null else a.产品名称 end,
定购数量=case when b.产品名称=a.产品名称 and b.定购数量=a.定购数量 and b.金额=a.金额 then null else a.定购数量 end,
金额=case when b.产品名称=a.产品名称 and b.定购数量=a.定购数量 and b.金额=a.金额 then null else a.金额 end,
a.交付时间,
a.交付数量
编号 产品名称 定购数量, 金额 交付时间 交付数量
1 a1 100 100 2003-01-01 00:00:00.000 50
NULL NULL NULL NULL 2004-01-01 00:00:00.000 50
NULL a2 80 160 NULL NULL
NULL a3 50 10 NULL NULL
2 b1 1 100 NULL NULL
NULL b2 18 180 NULL NULL
a b是别名
--a,b 是表的别名
-- 是判断选择语句当b.编号=a.编号是该列置为null 否则该列值为a.编号
临时表
2、a b代表什么意思? 这个语句中没有table这样的名称
表别名
3、为什么和方案一出来的结果不一样
看得有点晕 自己去测试下
4、能否解释以下这是什么意思? 查case when 的用法 一般用与判断和行转列