まず、条件付き集計を使用して、両方の条件を同時に集計することをお勧めします。
SELECT
e.EmpName
,COUNT(CASE WHEN ClaimSource = 'Aging Report' THEN ClaimSource END) as [Aging Report]
,COUNT(CASE WHEN ClaimSource = 'Appeal' THEN ClaimSource END) as [Appeal]
,COUNT(CASE WHEN ClaimSource = 'Denied' THEN ClaimSource END) as [Denied]
,COUNT(CASE WHEN ClaimSource = 'Rejected' THEN ClaimSource END) as [Rejected]
,COUNT(CASE WHEN ClaimSource = 'Special Project' THEN ClaimSource END) as [Special Project]
,COUNT(CASE WHEN ClaimSource = 'Eligibility' THEN ClaimSource END) as [Eligibility]
,COUNT(CASE WHEN ClaimSource = 'Correspondence' THEN ClaimSource END) as [Correspondence]
,COUNT(CASE WHEN TicketStatus = 'Recalling' THEN TicketStatus END) as [Recalling]
FROM ClaimMaster c
INNER JOIN Allocation a ON c.ClaimMasterId = a.ClaimMasterId
INNER JOIN myUsers..EmpMaster e ON a.AllocatedToEmpId = e.AspUsername
WHERE TicketStatus IN ('First Review','Calling Pending','Analyst Action','Recalling')
GROUP BY
e.EmpName
あなたは、本質的にそれを行うことはできませんClaimSourceとTicketStatus PIVOTに基づいて集計の2つの異なる種類をやろうとしています。実際に何が起こっているか最初のPivotはチケットステータスがまだ残っているため、余分な行を作成します。次に、その列がピボットされてカウントされ、それを落とす次のピボットただし、他の列がすべて存在するため、実際には集計は実行されません。私はあなたの従業員がRecallingTicketStatusを持っていないというデータのイメージから推測することができます。
SELECT
EmpName
,SUM([Aging Report]) as [Aging Report]
,SUM([Appeal] as [Appeal]
,SUM([Denied]) as [Denied]
,SUM[Rejected]) as [Rejected]
,SUM([Special Project]) as [Special Project]
,SUM([Eligibility]) as [Eligibility]
,SUM([Correspondence]) as [Correspondence]
,COUNT(Recalling) as Recalling
FROM (
SELECT e.EmpName, ClaimSource, TicketStatus FROM ClaimMaster c
INNER JOIN Allocation a ON c.ClaimMasterId = a.ClaimMasterId
INNER JOIN myUsers..EmpMaster e ON a.AllocatedToEmpId = e.AspUsername
WHERE TicketStatus IN ('First Review','Calling Pending','Analyst Action','Recalling')
) m
PIVOT (
COUNT(ClaimSource)
FOR ClaimSource IN ([Aging Report],[Appeal],[Denied],[Rejected],[Special Project],[Eligibility],[Correspondence])
) n
GROUP BY
EmpName
それとも、より簡単にClaimSourceのためのピボットを行い、標準の集約を行うと呼び出しのために参加するだけ:代わりにあなたが凝集の第二ラウンドを行うことが二回目の回動。しかし、あなたがこれを行うならば、従業員IDを代わりに持ち歩くことを提案するでしょう。
SELECT *
FROM
(SELECT *
FROM (
SELECT e.EmpName, ClaimSource FROM ClaimMaster c
INNER JOIN Allocation a ON c.ClaimMasterId = a.ClaimMasterId
INNER JOIN myUsers..EmpMaster e ON a.AllocatedToEmpId = e.AspUsername
WHERE TicketStatus IN ('First Review','Calling Pending','Analyst Action')
) m
PIVOT (
COUNT(ClaimSource)
FOR ClaimSource IN ([Aging Report],[Appeal],[Denied],[Rejected],[Special Project],[Eligibility],[Correspondence])
) n
) t
INNER JOIN (
SELECT
SELECT e.EmpName, COUNT(TicketStatus) as Recalling FROM ClaimMaster c
INNER JOIN Allocation a ON c.ClaimMasterId = a.ClaimMasterId
INNER JOIN myUsers..EmpMaster e ON a.AllocatedToEmpId = e.AspUsername
WHERE TicketStatus IN ('Recalling')
) t2
ON T1.EmpName = t2.EmpName
これを解決するには、クエリの各部分を順番に実行します。結果を1ピボットで見るようにしてください。 TicketStatusを使用すると、これを済ませたらフラグを立てたはずです。
「私は間違いました。私は正しい出力を得ることができますか?正しい*出力は*何ですか?* – Siyual
いくつかのテストデータを使用して再生する例は私たち自身で作成しないでください。また、あなたの望む結果が何であるかを示してください。 http://meta.stackoverflow.com/questions/271055/tips-for-asking-a-good-structured-query-language-sql-question/271056 – Matt
@mattが出力画像を追加しました。どのように私はここにデータを表示することができます、私は44行 – Aruna