0

これは、私が昨日尋ねたことに基づいて改善された質問であり、ピボット テーブルは複雑すぎて私が必要としているものではないと判断しました。各ユーザーが完了したチケットの数を示す次のコードがあります。

昨日の同様の投稿 ( https://stackoverflow.com/users/2291321/ydaetskcor ) からのアドバイスから、次のように動作するように単純化することが提案されました。

SELECT Names, COUNT(Names)
FROM Table1
GROUP BY Names

以下のコードを取得してボールをプレイしようとしているにもかかわらず、以下のコードを取得してリスト内の各ユーザーの数を表示する方法を見つけるのにまだ苦労しています。

以下のコードはユーザーの長いリストを表示しますが、何らかの理由で一意のユーザーの数を表示できません (そして、これが比較的単純な sql であることはわかっています!):

DECLARE @StartDate DateTime;
DECLARE @EndDate DateTime;

-- Date format: YYYY-MM-DD
SET @StartDate = '2013-11-06 00:00:00'
SET @EndDate = GETDATE()  -- Today


SELECT  (select Username from Membership where UserId =  Ticket.CompletedBy) as TicketStatusChangedBy

FROM         Ticket INNER JOIN
                      TicketStatus ON Ticket.TicketStatusID = TicketStatus.TicketStatusID INNER JOIN
                      Membership ON Ticket.CheckedInBy = Membership.UserId
WHERE TicketStatus.TicketStatusName = 'Completed' and Ticket.ClosedDate >= @StartDate --(GETDATE() - 1)
and Ticket.ClosedDate <= @EndDate --(GETDATE()-0)
ORDER BY Ticket.CompletedBy ASC, Ticket.ClosedDate ASC

以下を表示します

Paul
Matt
Matt
Bob
Matt
Paul
Matt
Matt
...  (could be many different users)

理想的には、ユーザーがリストに含まれる回数を表示したいと考えています。

Paul  |  2
Matt  |  5
Bob   |  1
4

2 に答える 2

1

I changed your query a bit. You were joining Membership but not by CompletedBy column but I did not see any reason to do so. I'm counting by Ticket.Id but I'm not sure such column exists there, so you may need to change that.

DECLARE @StartDate DateTime;
DECLARE @EndDate DateTime;

-- Date format: YYYY-MM-DD
SET @StartDate = '2013-11-06 00:00:00'
SET @EndDate = GETDATE()  -- Today


SELECT Username, Count(Ticket.Id) as Count
FROM  Ticket
INNER JOIN TicketStatus ON Ticket.TicketStatusID = TicketStatus.TicketStatusID
INNER JOIN Membership ON Ticket.CompletedBy = Membership.UserId
WHERE TicketStatus.TicketStatusName = 'Completed' and Ticket.ClosedDate >= @StartDate
      and Ticket.ClosedDate <= @EndDate
GROUP BY Username
于 2013-11-08T13:20:09.023 に答える