2017-06-23 17 views
0

私はちょうどデータをダンプすることから巨大なジャンプであるSQLレポートに飛び込み始めていますので、私に同行してください。SQL照会、希望出力の支援が必要

ここに、テーブルスキーマの簡単な説明があります。 テーブル名:CallLog フィールド:callid、トラッカー、recvddate、callsource

DB snap

私が私に与え、この単純なグループ化のクエリ

Select 
    right('00' + rtrim(Datepart(ww, recvddate)),2) week, 
    Tracker, 
    count(callsource) as [Email Tickets] 
from 
    calllog 

where datepart(year,recvddate) >= '2017' and callsource = 'email' 
group by right('00' + rtrim(Datepart(ww, recvddate)),2),Tracker 
order by 2,1 

使用して成功を収めてきました:

私はレポートを生成しようとしています私は、各呼び出し元の型のレコードの量を結果のクエリの独自の列としてカウントします。

Select 
    right('00' + rtrim(Datepart(ww, c1.recvddate)),2) week, 
    c1.Tracker, 
    count(c1.callsource) as [Email Tickets], 
    c2.[Queue Tickets] 
from 
    calllog c1 
inner join 
(
    Select 
     right('00' + rtrim(Datepart(ww, recvddate)),2) week, 
     Tracker, 
     count(callsource) as [Queue Tickets] 
    from 
     calllog 
    where datepart(year,recvddate) >= '2017' and callsource = 'phone' 
    group by right('00' + rtrim(Datepart(ww, recvddate)),2),Tracker 
) c2 
on c1.callid = c2.callid 

where datepart(year,recvddate) >= '2017' and callsource = 'email' 
group by right('00' + rtrim(Datepart(ww, recvddate)),2),Tracker 
order by 2,1 
をしかし、私は以下のエラーが表示されます。

これは私が試したものです。私は列を参照する方法を変更しようとしましたが、何も試したことはありません。

enter image description here

何かアドバイスが理解されます。

UPDATE:私は、私が探していたもので、このクエリを思い付くことができた@Simonの

Withtheヘルプ。

SELECT  A.[week] as [Week], 
      A.tracker as Tracker, 
      B.Tickets as [Queue Tickets], 
      C.Tickets as [Email Tickets], 
      A.Tickets as [Total Tickets] 
FROM  (SELECT RIGHT('00' + RTRIM(DATEPART(ww, recvddate)),2) [week], 
        Tracker, 
        COUNT(callid) as Tickets 
      FROM calllog 
      WHERE DATEPART(year,recvddate) >= '2017' and tracker = 'djtaylor' 
      GROUP BY RIGHT('00' + RTRIM(DATEPART(ww, recvddate)),2), Tracker) as A 

INNER JOIN (SELECT RIGHT('00' + RTRIM(DATEPART(ww, recvddate)),2) [week], 
        Tracker, 
        COUNT(callid) as Tickets 
      FROM calllog 
      WHERE DATEPART(year,recvddate) >= '2017' and callsource = 'queue' 
      GROUP BY RIGHT('00' + RTRIM(DATEPART(ww, recvddate)),2), Tracker) as B ON A.[week] = B.[week] 
                        AND A.Tracker = B.Tracker 
INNER JOIN (SELECT RIGHT('00' + RTRIM(DATEPART(ww, recvddate)),2) [week], 
        Tracker, 
        COUNT(callid) as Tickets 
      FROM calllog 
      WHERE DATEPART(year,recvddate) >= '2017' and callsource = 'email' 
      GROUP BY RIGHT('00' + RTRIM(DATEPART(ww, recvddate)),2), Tracker) as C ON A.[week] = C.[week] 
                        AND A.Tracker = C.Tracker 
ORDER BY 2,1 
+0

私が間違って理解していない限り、あなただけのことで選択し、グループにcallsourceを追加する必要があります。あなたの人/週/呼び出し元の人数を取得します – Simon

+1

グループの列トラッカーのテーブルエイリアスを指定する必要があります。それはc1.trackerまたはc2.trackerのいずれかでなければなりません – GuidoG

+0

コールソースを追加するべきではありません選択してグループ化するには?それはあなたが望んでいるようです。 – scsimon

答えて

1

私は、これはあなたが欲しいものだと思う:

Select 
    right('00' + rtrim(Datepart(ww, recvddate)),2) [week], 
    Tracker, 
    callsource, 
    count(callid) as [Email Tickets] 
from 
    calllog 

where datepart(year,recvddate) >= '2017' and callsource = 'email' 
group by right('00' + rtrim(Datepart(ww, recvddate)),2), Tracker, callsource 
order by [week], Tracker 

OK。私は、これはあなたが欲しいものだと思う:

SELECT  A.[week] as [Week], 
      A.tracker as Tracker, 
      A.callsource, 
      A.Tickets as CallSourceTickets, 
      B.Tickets CallCenterTickets 
FROM  (SELECT RIGHT('00' + RTRIM(DATEPART(ww, recvddate)),2) [week], 
        Tracker, 
        callsource, 
        COUNT(callid) as Tickets 
      FROM calllog 
      WHERE DATEPART(year,recvddate) >= '2017' 
      GROUP BY RIGHT('00' + RTRIM(DATEPART(ww, recvddate)),2), Tracker, callsource) as A 
INNER JOIN (SELECT RIGHT('00' + RTRIM(DATEPART(ww, recvddate)),2) [week], 
        Tracker, 
        COUNT(callid) as Tickets 
      FROM calllog 
      WHERE DATEPART(year,recvddate) >= '2017' 
      GROUP BY RIGHT('00' + RTRIM(DATEPART(ww, recvddate)),2), Tracker) as B ON A.[week] = B.[week] 
                        AND A.Tracker B.Tracker 
ORDER BY [Week], Tracker 
+0

よろしくお願いします。これはレコードを正常に返しますが、追加の呼び出し元の結果を追加の列として取り込むことを望んでいました。例えば、列ヘッダーは週、トラッカー、電子メールの数、キューの数などになります... – mttp1990

関連する問題