2011-04-06 96 views
2

我需要顯示時間06:00之間的數據 - 在同一時間組由時間間隔在SQL

這是樣本查詢I M使用06:00 - 18:00和18:00。我無法檢索第二組數據。怎麼做?

像 1, 2,進來06:00 - 18點範圍

和4, 5,進來18點 - 06:00範圍

SELECT  COUNT(cp.comm_pend_id) AS comm_pend_id, cp.UserID, um.Username, CONVERT(varchar, cp.submitted_date, 101) AS Date, SUM(cp.Earning) 
         AS Earning, SUM(cp.total_commission) AS total_commission 
FROM   dbo.comm_pending AS cp INNER JOIN 
         dbo.user_master AS um ON cp.UserID = um.UserID 
GROUP BY cp.UserID, CONVERT(varchar, cp.submitted_date, 101), um.Username, cp.PaidStatus, CONVERT(varchar(10), cp.submitted_date, 108) 
HAVING  (cp.PaidStatus = 'unpaid') AND (CONVERT(varchar(10), cp.submitted_date, 108) BETWEEN '06:00:00' AND '18:00:00') 
ORDER BY cp.UserID 

回答

0

由於18:00大於06:00,所以無法檢索第二組,因此在同一天他們之間沒有任何關係。對於第二組,您應該像這樣過濾:

((CONVERT(varchar(10), cp.submitted_date, 108) < '06:00:00' 
OR 
(CONVERT(varchar(10), cp.submitted_date, 108) > '18:00:00') 
+0

我想至06:00之間顯示兩個組數據 - 18:00至18:00 - 06:00 – Jaj 2011-04-06 16:07:46

+1

如果你表現出你期望作爲查詢的輸出在視覺上會是什麼幫助。 – 2011-04-06 16:15:32

0

CASE聲明可能會有所幫助。例如:

create table #times (num int, dt datetime) 

insert into #times values (1,'2011-4-6 0:00:00') 
insert into #times values (2,'2011-4-6 4:00:00') 
insert into #times values (3,'2011-4-6 8:00:00') 
insert into #times values (4,'2011-4-6 12:00:00') 
insert into #times values (5,'2011-4-6 16:00:00') 
insert into #times values (6,'2011-4-6 20:00:00') 

select 
    sum(case when (datepart(hh,dt) between 6 and 17) then num else 0 end) as daySum, 
    sum(case when (datepart(hh,dt) not between 6 and 17) then num else 0 end) as nightSum 
from #times