2011-07-21 12 views
1

私は週の各従業員の仕事を要約するクエリを取得しようとしています。例えば、John Doeは週に合計12枚のチケットを発行しました。そのうちの4枚はBreak/Fixesで、4枚はEnhancementで、もう1枚は未分類でした。SQLiteの要約クエリ

これは私がこれまで持っているものです。

ジョンDOE1 10 10 10 10 10 10

ジョンDOE2 2 2 2 2 2 2

:ここ

SELECT (users.first_name || ' ' || users.last_name) AS Name, 
    COUNT(tickets.id) AS 'Number of Tickets Closed', 
    COUNT(tickets.category = 'Maintenance') AS 'Maintenance Tickets', 
    COUNT(tickets.category = 'After Hours') AS 'After Hours Tickets', 
    COUNT(tickets.category = 'Break Fix') AS 'Break Fix Tickets', 
    COUNT(tickets.category = 'Enhancement') AS 'Enhancement Tickets', 
    COUNT(tickets.category = '') AS 'Non Categorized Tickets' 
FROM tickets, users 
ON tickets.assigned_to=users.id 
WHERE (tickets.status = 'closed') AND 
    (tickets.closed_at >= '2011-07-16 00:00:00') AND 
    (tickets.closed_at <= '2011-07-22 23:59:59') 
GROUP BY Name; 

は、サンプルの結果であり、

ジョンDoe3 25 24 24 24 24 24

ジョンDoe4 2 2 2 2 2 2

ジョンDoe5 12 10 10 10 10 10

ジョンDoe6 7 7 7 7 7 7

このクエリは、私はすべての列と、それを予想通りかなりの仕事は(同じ合計を持っていません閉鎖されたチケットの総数は、次の列に分類された列のみが含まれているようです。

EDIT

ジャスト機能のコードを投稿したい:

SELECT (users.first_name || ' ' || users.last_name) AS Name, 
    COUNT(tickets.id) AS 'Number of Tickets Closed', 
    COUNT(case tickets.category when 'Maintenance' then 1 else null end) AS 'Maintenance Tickets', 
    COUNT(case tickets.category when 'After Hours' then 1 else null end) AS 'After Hours Tickets', 
    COUNT(case tickets.category when 'Break Fix' then 1 else null end) AS 'Break Fix Tickets', 
    COUNT(case tickets.category when 'Enhancement' then 1 else null end) AS 'Enhancement Tickets', 
    COUNT(case tickets.category when '' then 1 else null end) AS 'Non Categorized Tickets' 
FROM tickets, users 
ON tickets.assigned_to=users.id 
WHERE (tickets.status = 'closed') AND 
    (tickets.closed_at >= '2011-07-16') AND 
    (tickets.closed_at <= '2011-07-22') 
GROUP BY Name; 

答えて

2

私はサンプルの結果を掲載この

... 
    COUNT(case tickets.category when 'Maintenance' then 1 else null end), 
    COUNT(case tickets.category when 'After Hours' then 1 else null end), 
... 
+0

これはうまくいきました!どうもありがとうございます! – Bigun

1

あなたがGROUP BY句でエイリアスを使用することはできません私には思えます。あなたのユーザーは、それらを区別するために使用できるIDを持っていませんか?

条件と比較する場合は、COUNTの代わりにSUMを使用する必要があります。

SELECT (users.first_name || ' ' || users.last_name) AS Name, 
    COUNT(tickets.id) AS 'Number of Tickets Closed', 
    SUM(tickets.category = 'Maintenance') AS 'Maintenance Tickets', 
    SUM(tickets.category = 'After Hours') AS 'After Hours Tickets', 
    SUM(tickets.category = 'Break Fix') AS 'Break Fix Tickets', 
    SUM(tickets.category = 'Enhancement') AS 'Enhancement Tickets', 
    SUM(tickets.category = '') AS 'Non Categorized Tickets' 
FROM tickets, users 
ON tickets.assigned_to=users.id 
WHERE (tickets.status = 'closed') AND 
    (tickets.closed_at >= '2011-07-16 00:00:00') AND 
    (tickets.closed_at <= '2011-07-22 23:59:59') 
GROUP BY Name; 
+0

のようにCOUNTを使用することもできます。 GROUP BY句でエイリアスを使用することができます。 後者の例を教えてもらえますか? – Bigun

+0

私はそれがMySQLで動作しないので、私は尋ねました。私は自分の投稿を編集しました。 – MatTheCat