0

我有一张表格,列出了员工的服务电话。我设置了一个视图来查看表格中的发票总和。

Select EmployeeID, SUM(InvoiceAmount) as "Total $ Amount Of Calls For January"
From Calls
WHERE Date BETWEEN '2013/01/01' AND '2013/01/31'
Group by EmployeeID

这很好用,但我必须每个月查看十二次,这似乎有点多余。我希望能够使用子查询来显示 EmployeeID,然后在下面列出每个月的总数。

EmployeeID   JAN   FEB   MAR   APR ...
john         444   555   342   654
jim          945   675   232   465

我尝试了很多东西,但都无法接近……我需要这样的东西,但那行得通……

SELECT   
EmployeeID, 

(SELECT SUM(InvoiceAmount) FROM Orders WHERE DATE BETWEEN '2013/01/01' AND '2013/01/31') AS JAN,

(SELECT SUM(InvoiceAmount) FROM Orders WHERE DATE BETWEEN '2013/02/01' AND '2013/02/28') AS FEB,

(SELECT SUM(InvoiceAmount) FROM Orders WHERE DATE BETWEEN '2013/03/01' AND '2013/03/31') AS MAR,

FROM Calls
4

1 回答 1

3

你可以这样做:

SELECT EmployeeID, 
    SUM(
        CASE
            WHEN strftime('%m', Date) = '01'
                THEN InvoiceAmount
            ELSE 0
        END) AS 'Jan',
    SUM(
        CASE
            WHEN strftime('%m', Date) = '02'
                THEN InvoiceAmount
            ELSE 0
        END) AS 'Feb',
    ...
    SUM(
        CASE
            WHEN strftime('%m', Date) = '12'
                THEN InvoiceAmount
            ELSE 0
        END) AS 'Dec'
FROM Calls
WHERE Date BETWEEN '2013-01-01' AND '2013-12-31'
GROUP BY EmployeeID

如果您正在查看特定年份,这很有效。

看到它在行动

于 2013-01-10T02:37:47.633 回答