日期:2014-05-19  浏览次数:20662 次

急; 求SQL語句
有2張表
表T
num         date
12           2007/03/11
11           2007/04/02
123         2007/03/22


表H
HDATE
2007/04/01
2007/04/03

表H紀錄的是所有的假日,我想得到以下的結果

num             count
12               2  
11               1
123             2

count為從T表至今的假日總數

------解决方案--------------------
declare @a table(num int, [date] smalldatetime)
insert @a select 12 , '2007/03/11 '
union all select 11 , '2007/04/02 '
union all select 123, '2007/03/22 '


declare @b table(HDATE smalldatetime)
insert @b select '2007/04/01 '
union all select '2007/04/03 '


select num,cou=(select count(1) from @b where hdate between a.[date] and getdate()) from @a a
------解决方案--------------------
create table T(num int,[date] datetime)
insert into T
select 12, '2007-3-11 ' union all
select 11, '2007-4-2 ' union all
select 123, '2007-3-22 '

create table H(Hdate datetime)
insert into H
select '2007-4-1 ' union all
select '2007-4-3 '

select num,count(*) as [count] from T
inner join H
on H.Hdate between T.[date] and getdate()
group by num

/*
num count
----------- -----------
11 1
12 2
123 2
*/

drop table t,h
------解决方案--------------------
CREATE TABLE T(NUM INT, TDATE DATETIME)
INSERT INTO T SELECT 12, '2007-03-11 '
UNION ALL SELECT 11, '2007-04-02 '
UNION ALL SELECT 123, '2007-03-22 '


CREATE TABLE H (HDATE DATETIME)
INSERT INTO H SELECT '2007-04-02 '
UNION ALL SELECT '2007-04-02 '
UNION ALL SELECT '2007-03-22 '


SELECT T.NUM,COUNT(T.tDATE) FROM T FULL OUTER JOIN H ON T.TDATE=H.HDATE GROUP BY T.NUM


11 2
12 1
123 1

------解决方案--------------------
declare @t table(num int,date datetime)
insert @t select 12, '2007/03/11 '
insert @t select 11, '2007/04/02 '
insert @t select 123, '2007/03/22 '

declare @H table(HDATE datetime)
insert @h select '2007/04/01 '
insert @h select '2007/04/03 '

select t.num,con=count(1)
from @t t left join @h h on t.date <h.HDATE
group by t.num


(1 行受影响)

(1 行受影响)

(1 行受影响)

(1 行受影响)

(1 行受影响)
num con
----------- -----------
11 1
12 2
123 2

(3 行受影响)