首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 数据库 > SQL Server >

sql 两表统计查询,该怎么处理

2013-10-24 
sql 两表统计查询有两张表表A 字段有 idpalyidsenddate表B 字段有 id sex senddate如表A 有如下两条数据 i

sql 两表统计查询
有两张表   表A 字段有 id  palyid  senddate  表B 字段有 id sex senddate
如表A 有如下两条数据
 id  palyid      senddate
 1     20       2010-10-22
 2     30       2010-10-20
表B有下面四条数据
 id   sex         senddate
  1    0         2010-10-20
  2    0         2010-10-20
  3    1         2010-10-22
  4    0         2010-10-19
  怎么查询通过senddate来判断相等的时间下有这样的数据  不相等就将各自的详细信息以一张新表获得结果  如
  id     senddate        team      person  
   1      2010-10-22       1          1
   2      2010-10-20       1          2
   3      2010-10-19       0          1
求大神帮忙  sql2005
[解决办法]
其实不知道你最终想要如何的,你看看是不是这样?

SELECT  ( ROW_NUMBER() OVER ( ORDER BY r.send_date DESC ) ) rownumber ,
        send_date ,
        ( SELECT    COUNT(*)
          FROM      T_xmim_provide_log r1
          WHERE     r1.send_date = r.send_date
        ) AS person ,
        ( SELECT    COUNT(*)
          FROM      T_xmim_Group_Provide_log r2
          WHERE     r2.send_date = r.send_date
        ) AS team
FROM    T_xmim_provide_log r
GROUP BY send_date
UNION ALL 
SELECT  ( ROW_NUMBER() OVER ( ORDER BY r.send_date DESC ) ) rownumber ,
        send_date ,
        ( SELECT    COUNT(*)
          FROM      T_xmim_provide_log r1
          WHERE     r1.send_date <> r.send_date
        ) AS person ,
        ( SELECT    COUNT(*)
          FROM      T_xmim_Group_Provide_log r2
          WHERE     r2.send_date <> r.send_date
        ) AS team
FROM    T_xmim_provide_log r
GROUP BY send_date

[解决办法]
稍微改进了下。。

create table #A(id int,palyid int,senddate datetime)
insert into #A select 1 ,20,'2010-10-22'
union all select 2,30,'2010-10-20'

create table #B(id int,sex int,senddate datetime)
insert into #B select 1,0,'2010-10-20'
union all select 2,0,'2010-10-20'
union all select 3,1,'2010-10-22'
union all select 4,0,'2010-10-19'


;with ceb as
(
select a.senddate,
count(*) as person
 from #B a  group by a.senddate
 )
 select (ROW_NUMBER() over(order by senddate)) id ,b.senddate,b.person,isnull((select (case when  a.palyid is not null then 1 else 0 end) as team from #A a where a.senddate=b.senddate ),0) as team
 from ceb b

热点排行
Bad Request.