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

これはうまく機能しますが、毎月表示するには12回実行する必要があり、これは少し冗長に思えます. サブクエリを使用して 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 に答える