日期:2014-05-18  浏览次数:20475 次

多表查询,苦搞半天没搞出来!!!!!!!
表一:
登陆码   客户   销售员   过期时间
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
*/