当前位置: 代码迷 >> Sql Server >> DBA_Huangzj入
  详细解决方案

DBA_Huangzj入

热度:29   发布时间:2016-04-25 00:35:48.0
DBA_Huangzj进
有表table1
 tid       itmed
 101        部门A
 101        部门B
 102        部门C
 102        部门B
 102        部门B
 103        部门C

还有个表table2
tid        timedate
101         2012-12-01
102         2012-12-03
103         2012-11-01

我要统计12年12月份  的 数据  条件怎么加呢?

------解决方案--------------------
--CREATE TABLE #t (tid INT,      itmed VARCHAR(10))
 --INSERT  INTO #t
 
 --SELECT 101   ,     '部门A'
 --union all select 101  ,      '部门B'
 --union all select 102   ,     '部门C'
 --union all select 102  ,      '部门B'
 --union all select 102  ,      '部门B'
 --union all select 103  ,      '部门C'
 --CREATE TABLE #t2(tid INT ,        timedate DATE)
 --INSERT INTO #t2
 --SELECT 101,         '2012-12-01'
 --UNION ALL 
 --SELECT 102,         '2012-12-03'
 --UNION ALL 
 --SELECT 103,         '2012-11-01'
 
 SELECT * INTO #t3
 FROM #t a WHERE EXISTS (SELECT 1 FROM #t2 b WHERE a.tid=b.tid AND b.timedate BETWEEN '2012-12-01' AND '2012-12-31')
 
 
 declare @s nvarchar(4000)
 set @s=''
 Select     @s=@s+','+quotename(itmed)+'=count(case when [itmed]='+quotename(itmed,'''')+' then 1 else null end)'
 from #t3 GROUP BY itmed
 exec('select COUNT( itmed) [所有部门]'+@s+' from #t3 ')
 
 
 /*
 
 (5 行受影响)
 所有部门        部门A         部门B         部门C
 ----------- ----------- ----------- -----------
 5           1           3           1
 警告: 聚合或其他 SET 操作消除了 Null 值。
 
 (1 行受影响)
 
 */