2017-06-22 8 views
1

こんにちは私は質問を書いていると私は明らかにテーブル全体(全員一緒に)の合計を返していると私はそれが従業員一人当たりの合計を返すようにしたい、これはまったく可能でしょうか?各SQL行の合計を取得

DECLARE @temp TABLE 
(
TotalAmount DECIMAL, 
ExpenseCategory UNIQUEIDENTIFIER, 
EmployeeId UNIQUEIDENTIFIER, 
CategoryName NVARCHAR(100) 
) 

INSERT INTO @temp 

SELECT SUM(dbo.ExpenseDetails.TotalAmount) AS TotalAmount,   
dbo.ExpenseDetails.ExpenseCategory, dbo.ExpenseDetails.EmployeeId, 
dbo.ExpensesCategories.CategoryName 
FROM   dbo.ExpenseDetails INNER JOIN 
        dbo.ExpensesCategories ON 
dbo.ExpenseDetails.ExpenseCategory = dbo.ExpensesCategories.CategoryId 
WHERE  (CONVERT(DATE, dbo.ExpenseDetails.DateAdded) < CONVERT(DATE, 
DATEADD(m, DATEDIFF(m, 0, CONVERT(DATE, GETDATE())), 23 - 1))) AND 
(CONVERT(DATE, dbo.ExpenseDetails.DateAdded) > CONVERT(DATE, 
         DATEADD(MONTH, - 1, DATEADD(m, DATEDIFF(m, 0, 
CONVERT(DATE, GETDATE())), 23 - 1)))) 
GROUP BY dbo.ExpenseDetails.ExpenseCategory, dbo.ExpenseDetails.EmployeeId, 
dbo.ExpensesCategories.CategoryName 

SELECT 
EmployeeId, 
(SELECT SUM(TotalAmount) FROM @temp WHERE EmployeeId = [@temp].EmployeeId 
and ExpenseCategory = '6CC0F801-D295-4997-9D1F-3E5B2BE692ED') AS TotalFuel, 
(SELECT SUM(TotalAmount) FROM @temp WHERE EmployeeId = [@temp].EmployeeId 
and ExpenseCategory = '3E54C10B-ECBE-4B28-87A4-5A4E43AACDFC') AS TotalRail, 
(SELECT SUM(TotalAmount) FROM @temp WHERE EmployeeId = [@temp].EmployeeId 
and ExpenseCategory = '31CC43A4-80E6-4DD4-A28C-039F05AF62A3') AS 
TotalParking, 
(SELECT SUM(TotalAmount) FROM @temp WHERE EmployeeId = [@temp].EmployeeId 
and ExpenseCategory = '01250A30-3865-40D2-9E49-DA2B9898B1F4') AS 
TotalMileage, 
(SELECT SUM(TotalAmount) FROM @temp WHERE EmployeeId = [@temp].EmployeeId 
and ExpenseCategory = 'F4E4582D-DEDF-499D-BBC1-45003B865218') AS TotalEquip, 
(SELECT SUM(TotalAmount) FROM @temp WHERE EmployeeId = [@temp].EmployeeId 
and ExpenseCategory = '55F471C1-6E52-4898-8263-0B7684B78E7C') AS TotalPPS, 
(SELECT SUM(TotalAmount) FROM @temp WHERE EmployeeId = [@temp].EmployeeId 
and ExpenseCategory = '1EE0FC40-193F-4720-9143-0B61FFDE7B8D') AS TotalOther 

FROM @temp GROUP BY EmployeeId 

答えて

1

条件で使用SUM:うまく働い

SELECT 
    EmployeeId, 
    TotalFuel = SUM(CASE WHEN ExpenseCategory = '6CC0F801-D295-4997-9D1F-3E5B2BE692ED' THEN TotalAmount END) 
FROM @temp 
GROUP BY EmployeeId 
+0

こんにちはミハイル、唯一の問題は、今では社員によって私のグループをさせないだろうということですので、私は、重複で終わります行。 –

+0

私はそれを逃した。 'group by'では' OVER'は必要ありません –

+0

おかげでミハイル、素晴らしい作品! –

0
SELECT 
EmployeeId, 
(SELECT SUM(TotalAmount) FROM @temp WHERE ExpenseCategory = '6CC0F801-D295-4997-9D1F-3E5B2BE692ED') AS TotalFuel, 
(SELECT SUM(TotalAmount) FROM @temp WHERE ExpenseCategory = '3E54C10B-ECBE-4B28-87A4-5A4E43AACDFC') AS TotalRail, 
(SELECT SUM(TotalAmount) FROM @temp WHERE ExpenseCategory = '31CC43A4-80E6-4DD4-A28C-039F05AF62A3') AS TotalParking, 
(SELECT SUM(TotalAmount) FROM @temp WHERE ExpenseCategory = '01250A30-3865-40D2-9E49-DA2B9898B1F4') AS TotalMileage, 
(SELECT SUM(TotalAmount) FROM @temp WHERE ExpenseCategory = 'F4E4582D-DEDF-499D-BBC1-45003B865218') AS TotalEquip, 
(SELECT SUM(TotalAmount) FROM @temp WHERE ExpenseCategory = '55F471C1-6E52-4898-8263-0B7684B78E7C') AS TotalPPS, 
(SELECT SUM(TotalAmount) FROM @temp WHERE ExpenseCategory = '1EE0FC40-193F-4720-9143-0B61FFDE7B8D') AS TotalOther 
FROM @temp GROUP BY EmployeeId 

Can you try this? 
Usually when Group By is used it should be followed with "having" at the end. It should not be present in where condition 
+0

それは私にテーブルの合計を与えることは間違いありません。 –

+0

最後に条件を満たすグループ別EmployeeId EmployeeId =(または条件付き) –

関連する問題