0

我有一个非常简单的 SQL 查询,它通过以下方式获得结果

COL-A         COL-B 
WINDCHILL   99.998889
WINDCHILL   96.000000

现在我如何修改我的查询,以便在一行中获得总数?

COL-A         COL-B 
WINDCHILL   195.99

必要的查询如下;

SELECT ISNULL([Task IT Assets], [Project IT Asset]) AS Asset ,
        SUM(P.ActualWork) AS taskHours
FROM    [IR.TimesheetHoursProjectTask] p
WHERE   p.ActualWork > 0
AND ([Task IT Assets] IS NOT NULL OR [Project IT Asset] IS NOT NULL)
GROUP BY ISNULL([Task IT Assets], [Project IT Asset]), ActualWork
ORDER BY p.ActualWork DESC
4

4 回答 4

2

很难理解您提供的数据与您提供的查询之间的关系。

该查询似乎完全符合您的需要,按资产分组的任务小时数。如果由于某种原因它没有,您可以使用 CTE:

with MY_QUERY as (
SELECT ISNULL([Task IT Assets], [Project IT Asset]) AS Asset ,
        SUM(P.ActualWork) AS taskHours
FROM    [IR.TimesheetHoursProjectTask] p
WHERE   p.ActualWork > 0
AND ([Task IT Assets] IS NOT NULL OR [Project IT Asset] IS NOT NULL)
GROUP BY ISNULL([Task IT Assets], [Project IT Asset]), ActualWork
)
select asset, taskHours
from MY_QUERY 
group by asset
于 2012-04-19T10:14:44.453 回答
1

您已经标记了两个特定的 sql 版本,但假设您可以使用支持公用表表达式的版本:

with sumTable as
(
    SELECT ISNULL([Task IT Assets], [Project IT Asset]) AS Asset ,  
            SUM(P.ActualWork) AS taskHours  
    FROM    [IR.TimesheetHoursProjectTask] p  
    WHERE   p.ActualWork > 0  
    AND ([Task IT Assets] IS NOT NULL OR [Project IT Asset] IS NOT NULL)  
    GROUP BY ISNULL([Task IT Assets], [Project IT Asset]), ActualWork   
)

SELECT Asset, Sum(taskHours)
FROM sumTable
GROUP BY Asset
于 2012-04-19T10:01:23.213 回答
1

一个快速的方法:

SELECT Asset, SUM(taskHours) FROM (
SELECT ISNULL([Task IT Assets], [Project IT Asset]) AS Asset ,
    SUM(P.ActualWork) AS taskHours
FROM    [IR.TimesheetHoursProjectTask] p
WHERE   p.ActualWork > 0
AND ([Task IT Assets] IS NOT NULL OR [Project IT Asset] IS NOT NULL)
GROUP BY ISNULL([Task IT Assets], [Project IT Asset]), ActualWork
) as table1
ORDER BY 1
于 2012-04-19T10:01:36.113 回答
1

我认为问题是你不应该ActualWork在你的GROUP BY条款中有。

试试这个:

SELECT ISNULL([Task IT Assets], [Project IT Asset]) AS Asset ,
        SUM(P.ActualWork) AS taskHours
FROM    [IR.TimesheetHoursProjectTask] p
WHERE   p.ActualWork > 0
AND ([Task IT Assets] IS NOT NULL OR [Project IT Asset] IS NOT NULL)
GROUP BY ISNULL([Task IT Assets], [Project IT Asset])
ORDER BY SUM(P.ActualWork) DESC
于 2012-04-19T10:01:39.283 回答