0

次の方法で結果を取得する非常に単純な SQL クエリがあります。

COL-A         COL-B 
WINDCHILL   99.998889
WINDCHILL   96.000000

1行で合計を取得するようにクエリを変更するにはどうすればよいですか?

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

2つの特定の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 に答える