多表查询,苦搞半天没搞出来!!!!!!!
表一:
登陆码 客户 销售员 过期时间
aaaaa aaa 1111 121212
bbbbb bbb 2222 131313
表二:
登陆码 时间 状态
aaaaa 1414 ok
aaaaa 1515 ok
bbbbb 1616 ok
需要完成的是:
客户 销售员 登陆次数 第一次登陆时间 最后一次登陆时间 过期时间
aaaaa 1111 2 1414 1515 121212
bbbbb 2222 1 1616 1616 131313
求sql语句谢谢!
------解决方案--------------------select
a.登陆码,
a.销售员,
登录次数,
第一次 第一次登录时间,
末次 最后一次登录时间,
过期时间
from A,(select 登陆码,count(1) 次数,min(时间)第一次,max(时间) 末次 from B group by 登陆码)B
where a.登陆码=b.登陆码
------解决方案--------------------SELECT 客户,销售员,登陆次数,第一次登陆时间,最后一次登陆时间,过期时间
FROM 表一 LEFT OUTER JOINT (SELECT 登陆码,COUNT(登陆码) AS 登陆次数,MAX(表二.时间) AS 第一次登陆,MIN(派生表.时间) AS 最后一次登陆
FROM 表二 LEFT OUTER JOINT 表二 AS 派生表 ON 表二.登陆码=派生表.登陆码)AS 派生表二
ON 表一.登陆码=派生表二.登陆码
------解决方案--------------------select
客户=a.登陆码,--???
a.销售员,
登陆次数=count(*),
第一次登陆时间=min(b.时间),
最后一次登陆时间=max(b.时间),
a.过期时间
from 表1 a join 表2 b
on a.登陆码=b.登陆码
group by a.登陆码,a.销售员,a.过期时间
------解决方案-------------------- select
a.客户 ,
a.销售员,
b.登陆次数,
b.第一次登陆时间,
b.最后一次登陆时间,
a.过期时间
from t a
left join
(
select 登陆码 ,min(时间)as 第一次登陆时间,max(时间)as 最后一次登陆时间 from t2 group by 登陆码
)b
on a.登陆码=b.登陆码
------解决方案----------------------原始数据:@T1
declare @T1 table(登陆码 varchar(5),客户 varchar(3),销售员 int,过期时间 int)
insert @T1
select 'aaaaa ', 'aaa ',1111,121212 union all
select 'bbbbb ', 'bbb ',2222,131313
--原始数据:@T2
declare @T2 table(登陆码 varchar(5),时间 int,状态 varchar(3))
insert @T2
select 'aaaaa ',1414, 'ok ' union all
select 'aaaaa ',1515, 'ok ' union all
select 'bbbbb ',1616, 'ok '
/*
需要完成的是:
客户 销售员 登陆次数 第一次登陆时间 最后一次登陆时间 过期时间
aaaaa 1111 2 1414 1515 121212
bbbbb 2222 1 1616 1616 131313
*/
select
客户=a.登陆码,--???
a.销售员,
登陆次数=count(*),
第一次登陆时间=min(b.时间),
最后一次登陆时间=max(b.时间),
a.过期时间
from @T1 a join @T2 b
on a.登陆码=b.登陆码
group by a.登陆码,a.销售员,a.过期时间
/*
结果是:
客户 销售员 登陆次数 第一次登陆时间 最后一次登陆时间 过期时间
aaaaa 1111 2 1414 1515 121212
bbbbb 2222 1 1616 1616 131313
*/