1

这是我目前没有按 createdDate 过滤任何内容的内容。

SELECT [employeeID]
      ,employeeName
      ,isnull((SELECT SUM(case when clientID != 10 then timeSpent else 0 end)),0) as 'billable'

      ,isnull((SELECT SUM(case when clientID = 10 then timeSpent else 0 end)),0) as 'nonBillable'
FROM [myDB].[dbo].[myTable]
group by employeeID,employeeName

输出:

employeeID employeeName billable nonbillable
---------- ------------ -------- -----------
1          tom          5230     2302
2          dick         25       8439
3          harry        2430     9433

准确的输出将是相似的,但值的总和仅在日期范围内:

employeeID employeeName billable nonbillable
---------- ------------ -------- -----------
1          tom          35       5
2          dick         25       15
3          harry        2        48

[myTable] 有以下字段:employeeID,employeeName,clientID,timeSpent,createdDate

我需要能够在每个 select sum 语句中添加一个过滤器,类似于以下内容: WHERE createdDate BETWEEN ('2012-10-01') AND ('2012-10-07')

以下变体都会因 SQL 错误或输出不准确而失败:

SELECT [employeeID]
      ,employeeName
      ,isnull((SELECT SUM(case when clientID != 10 then timeSpent else 0 end)),0) as 'billable'
      ,isnull((SELECT SUM(case when clientID = 10 then timeSpent else 0 end)),0) as 'nonBillable'
FROM [myDB].[dbo].[myTable]
WHERE createdDate BETWEEN ('2012-10-01') AND ('2012-10-07')
group by employeeID,employeeName

SELECT DISTINCT [employeeID]
      ,employeeName
      ,isnull((SELECT SUM(case when clientID != 10 then timeSpent else 0 end)),0) as 'billable'
      ,isnull((SELECT SUM(case when clientID = 10 then timeSpent else 0 end)),0) as 'nonBillable'
FROM [myDB].[dbo].[myTable]
WHERE createdDate BETWEEN ('2012-10-01') AND ('2012-10-07')
group by employeeID,employeeName

SELECT [employeeID]
      ,employeeName
      ,isnull((SELECT SUM(case when clientID != 10 then timeSpent else 0 end)WHERE createdDate BETWEEN ('2012-10-01') AND ('2012-10-07')),0) as 'billable'
      ,isnull((SELECT SUM(case when clientID = 10 then timeSpent else 0 end)WHERE createdDate BETWEEN ('2012-10-01') AND ('2012-10-07')),0) as 'nonBillable'
FROM [myDB].[dbo].[myTable]
group by employeeID,employeeName,createdDate

任何帮助将不胜感激。

提前致谢。

4

1 回答 1

1

第一个查询应该给你正确的结果

SELECT [employeeID] 
      ,employeeName 
      ,isnull((SELECT SUM(case when clientID != 10 then timeSpent else 0 end)),0) as 'billable' 
      ,isnull((SELECT SUM(case when clientID = 10 then timeSpent else 0 end)),0) as 'nonBillable' 
FROM [myDB].[dbo].[myTable] 
WHERE createdDate BETWEEN '2012-10-01' AND '2012-10-07'
group by employeeID,employeeName 

但是,如果createdDate是日期时间类型,则它只会返回 '2012-01-01 00:00' 和 '2012-10-07 00:00' 之间的值 - 2012-10-07 00:01 之后没有任何值。理想情况下,您会将过滤日期指定为日期,而不是字符串。

于 2012-10-11T20:13:57.393 回答