34,873
社区成员
发帖
与我相关
我的任务
分享FROM A FULL JOIN B ON A.USR = B.USR AND A.DD = B.DD
进行连接的时候,A和B表中的记录都满足连接条件
select a.*,mc_count=isnull(b.mc_count,0),mc_kind=isnull(b.mc_kind,0)
from a left join b on a.usr=b.usr and a.ti_kind=b.mc_count
F1 2008-11-29 00:00:00.000 2 1 1 1
F1 2008-11-29 00:00:00.000 1 2 0 0create table a(USR varchar(10), DD datetime, TI_COUNT int, TI_KIND int)
insert into a values('F1', '2008-11-29' , 2 , 1 )
insert into a values('F1', '2008-11-29' , 1 , 2 )
create table b(USR varchar(10), DD datetime, MC_COUNT int, MC_KIND int)
insert into b values('F1', '2008-11-29' , 1 , 1 )
go
select t.* ,
case when TI_COUNT=(select max(TI_COUNT) from a where USR = t.USR) then b.mc_count else 0 end as mc_count,
case when TI_COUNT=(select max(TI_COUNT) from a where USR = t.USR) then b.MC_KIND else 0 end as MC_KIND
from a t, b
where t.USR = b.USR and t.dd = b.dd
drop table a , b
/*
USR DD TI_COUNT TI_KIND mc_count MC_KIND
---------- ------------------------------------------------------ ----------- ----------- ----------- -----------
F1 2008-11-29 00:00:00.000 2 1 1 1
F1 2008-11-29 00:00:00.000 1 2 0 0
(所影响的行数为 2 行)
*/create table a(USR varchar(10), DD datetime, TI_COUNT int, TI_KIND int)
insert into a values('F1', '2008-11-29' , 2 , 1 )
insert into a values('F1', '2008-11-29' , 1 , 2 )
create table b(USR varchar(10), DD datetime, MC_COUNT int, MC_KIND int)
insert into b values('F1', '2008-11-29' , 1 , 1 )
go
select a.* ,
case when TI_COUNT=(select max(TI_COUNT) from a where USR=a.USR) then b.mc_count else 0 end as mc_count,
case when TI_COUNT=(select max(TI_COUNT) from a where USR=a.USR) then b.MC_KIND else 0 end as MC_KIND
from a , b
where a.USR = b.USR and a.dd = b.dd
drop table a , b
/*
USR DD TI_COUNT TI_KIND mc_count MC_KIND
---------- ------------------------------------------------------ ----------- ----------- ----------- -----------
F1 2008-11-29 00:00:00.000 2 1 1 1
F1 2008-11-29 00:00:00.000 1 2 0 0
(所影响的行数为 2 行)
*/create table tb(USR varchar(10), DD datetime, TI_COUNT int, TI_KIND int)
insert into tb values('F1' ,'2008-11-28', 1, 1)
insert into tb values('F1' ,'2008-11-29', 2, 1)
insert into tb values('F1' ,'2008-11-29', 1, 2)
insert into tb values('F2' ,'2008-11-28', 1, 2)
insert into tb values('SA' ,'2008-9-27' , 1, 1)
insert into tb values('SA' ,'2008-10-6' , 1, 1)
go
select * , id = (select count(1) from tb where USR = t.USR and (dd<t.dd or (dd=t.dd and TI_KIND < t.TI_KIND ) ) ) + 1 from tb t order by usr , id
drop table tb
/*
USR DD TI_COUNT TI_KIND id
---------- ------------------------------------------------------ ----------- ----------- -----------
F1 2008-11-28 00:00:00.000 1 1 1
F1 2008-11-29 00:00:00.000 2 1 2
F1 2008-11-29 00:00:00.000 1 2 3
F2 2008-11-28 00:00:00.000 1 2 1
SA 2008-09-27 00:00:00.000 1 1 1
SA 2008-10-06 00:00:00.000 1 1 2
(所影响的行数为 6 行)
*/select * , id = (select count(1) from tb where USR = t.USR and (dd<t.dd or (dd=t.dd and TI_COUNT < t.TI_COUNT ) ) ) + 1 from tb tif object_id('ta')is not null drop table ta
go
create table ta(USR varchar(5), DD datetime,TI_COUNT int,TI_KIND int)
insert ta select 'F1' , '2008-11-29' , 2 , 1
insert ta select 'F1' , '2008-11-29' , 1 , 2
insert ta select 'F1' , '2008-11-29' , 3 , 3
insert ta select 'F2' , '2008-11-30' , 4 , 1
if object_id('tb')is not null drop table tb
go
create table tb(USR varchar(5),DD datetime,MC_COUNT int,MC_KIND int)
insert tb select 'F1' , '2008-11-29', 3, 1
insert tb select 'F1' , '2008-11-29', 4, 2
alter table ta add id int identity
go
alter table tb add id int identity
go
select a.usr,a.dd,a.TI_COUNT,a.TI_KIND,isnull(b.MC_COUNT,0),isnull(b.MC_KIND,0) from ta a left join tb b on a.usr=b.usr and a.dd=b.dd and a.id=b.id
alter table ta drop column id
go
alter table tb drop column id
go
/*usr dd TI_COUNT TI_KIND
----- ------------------------------------------------------ ----------- ----------- ----------- -----------
F1 2008-11-29 00:00:00.000 2 1 3 1
F1 2008-11-29 00:00:00.000 1 2 4 2
F1 2008-11-29 00:00:00.000 3 3 0 0
F2 2008-11-30 00:00:00.000 4 1 0 0
*/