请教稍微有点刁钻的sql语句。如何用sql语句获得某一天所在那个月的工作日天数?(50分)

T

ttaa

Unregistered / Unconfirmed
GUEST, unregistred user!
两个问题

1,如何用sql语句获得某一天所在那个月的工作日天数。
也就是说某一个月正常上班的天数(除了星期六、星期日之外的天数)。

2,有一个表如下

model qty date
..
..
cd11 10 2002/1
cd11 11 2002/2
..
cd11 15 2002/8
..
cd11 10 2002/11
..
..
cd22 30 2002/1
cd22 15 2002/2
..
cd22 15 2002/8
..
cd22 20 2002/11
..
其中'..'表示还有其他数据。
相同model在同一个月份只有一条纪录。
现在用sql语句显示成下表:(2002年的纪录)

2002/1 2002/2 2002/3....2002/8....2002/11
..
cd11 10 11 .. .. 15 .. 10
cd22 30 15 .. .. 15 .. 20
..
各位大虾明白我的意思吧?
 
记得SQL有星期函数 DATEPART(dw, GetDate()) 返回的是星期几。
然后根据这个去找表中的记录吧
 
没有这么简单的事
 
你的 DATE 是不是日期型的呀,如果是
SELECT MODEL, SUM(CASE WHEN (DATEPART(mm, date))
= 1 THEN qty END) '1月份', SUM(CASE WHEN (DATEPART(mm, date))
= 2 THEN qty END) '2月份', SUM(CASE WHEN (DATEPART(mm, date))
= 3 THEN qty END) '3月份', SUM(CASE WHEN (DATEPART(mm, date))
= 4 THEN qty END) '4月份', SUM(CASE WHEN (DATEPART(mm, date))
= 5 THEN qty END) '5月份', SUM(CASE WHEN (DATEPART(mm, date))
= 6 THEN qty END) '6月份', SUM(CASE WHEN (DATEPART(mm, date))
= 7 THEN qty END) '7月份', SUM(CASE WHEN (DATEPART(mm, date))
= 8 THEN qty END) '8月份', SUM(CASE WHEN (DATEPART(mm, date))
= 9 THEN qty END) '9月份', SUM(CASE WHEN (DATEPART(mm, date))
= 10 THEN qty END) '10月份', SUM(CASE WHEN (DATEPART(mm,date))
= 11 THEN qty END) '11月份', SUM(CASE WHEN (DATEPART(mm,date))
= 12 THEN qty END) '12月份'
FROM TABLE
WHERE (date >= '01/01/2002' AND date <= '12/31/2002')
GROUP BY MODAL,DATE
 
我先试下sunys的语句。
 
提供一个思路给你,不知道对你是否有用

if exists(select * from sysobjects where type='P' and name='Spp_WorkDay')
drop procedure Spp_WorkDay
go
create procedure Spp_WorkDay @Year varchar(4), @Month varchar(2) as
begin
declare @start varchar(10)
select @start=@year+'-'+@month+'-1'
declare @MaxDay integer, @CurDay Integer
select @CurDay=1,@MaxDay=datediff(dd, @start, dateadd(mm,1,@start))
declare @Dates varchar(400),@CurDate varchar(10)
while @CurDay <= @MaxDay
begin
select @CurDate=@Year+'-'+@Month+'-'+Convert(varchar(2), @CurDay)
if DATEPART(weekday, @CurDate)>1 and DATEPART(weekday, @CurDate) < 7
begin
if @Dates is null
select @dates=@CurDate
else
select @dates=@dates+','+@CurDate
end
select @CurDay=@CurDay+1
end;
print @dates
end
go
Spp_WorkDay '2002','11'

 
要自己做吧,
软件都是老外设计的,
象我们的十一放假老外肯定不会考虑的。
 
sunys兄解决了第二个问题。很好。嘻嘻,我怎么没想到呢?
第一个问题。先不考虑jsxjd兄说的情况了。那太复杂。
只需除去星期六星期天就行了。
 
顶部