1

あいまいな質問で申し訳ありませんが、私の英語はそれほど上手ではありません。だから私の質問があります:

SELECT ticketID, 
status,
COUNT(status) as count,
statusName,
assign   
FROM ticket, department, status 
WHERE ticket.department = 100 
AND ticket.department = department.departID 
AND ticket.status = status.statusID
GROUP BY statusName,assign

これが結果です。

| ticketID   | count       | statusName | assign |
|:----------|-----------:|:---------:|:-------:
| 1002       |           2 |       open |   NULL |
| 1020       |           1 |       open |  James |
| 1021       |           1 |       open |   Nick |
| 1015       |           1 |    overdue |   NULL |

私の目標は、ステータスごとにチケットをカウントすることでした.status = 'open'およびassign = nullの場合、ステータスは「unassigned」に変更されます。より良い解決策または「James」と「」の結果をマージする方法が必要です.チケットが割り当てられているかどうかを知る必要があるだけなので、Nick' が 1 つになります。

4

3 に答える 3

1
SELECT ticketID, 
status,
COUNT(status) as count,
statusName,
'unassigned'   
FROM ticket, department, status 
WHERE ticket.department = 100 
AND ticket.department = department.departID 
AND ticket.status = status.statusID
AND assign is NULL
GROUP BY statusName
UNION
SELECT ticketID, 
status,
COUNT(status) as count,
statusName,
'assigned'   
FROM ticket, department, status 
WHERE ticket.department = 100 
AND ticket.department = department.departID 
AND ticket.status = status.statusID
AND assign is NOT NULL
GROUP BY statusName

このクエリは、未割り当ておよび割り当て済みのチケットを、2 つのばらばらな結果セットの和集合の形式で取得します。

于 2013-01-24T16:34:42.730 に答える
1

部門テーブルが必要な場所が表示されません。安全に削除できると思いますが...

SELECT a.statusID, a.Status, Count(*) 
FROM(
   SELECT statusID,
   (CASE WHEN statusName = 'open' and assign IS NULL THEN 'unassigned' 
         WHEN statusName ='open' and assign IS NOT NULL THEN 'assigned'
         ELSE statusName
         END) as Status
   FROM ticket 
   INNER JOIN department ON ticket.department = department.departID 
   INNER JOIN status ON ticket.status = status.statusID
   WHERE ticket.department = 100) as a
GROUP BY a.Status, a.statusID

SqlFiddle (簡略化)

于 2013-01-24T15:50:50.763 に答える
0
SELECT ticketID,status,sum(CASE status 
    WHEN 'open' then 1
    WHEN '' then 1
    WHEN NULL then 1
    else 0) as count,statusName,assign   
        FROM ticket, department, status WHERE ticket.department = 100 
        AND ticket.department = department.departID 
        AND ticket.status = status.statusID
        GROUP BY statusName,assign
于 2013-01-24T15:37:15.843 に答える