0

レポートのソースとして使用する次の 2 つの手順があります。現在、SQL Server Reporting Services 2008 R2 レポートで 2 つの異なるテーブルを提示しています。これらは 2 つの異なるデータ セットに属しているため、それらをまとめることができないからです。

それらを単一のテーブルに表示したいのですが、ここで JOIN を使用しようとして成功していません。それ、どうやったら出来るの?

注: cNamein は in にIAgentQueueStats対応UserIdAgentActivityLogます。

/*** Aggregate values for Call Center Agents for calls, talk and hold time ***/
/*** The detail/row values is per 30-minute interval ***/
ALTER PROCEDURE [dbo].[sp_IAgentQueueStats_OnlyCalls_Grouped]
    @p_StartDate datetime,
    @p_EndDate datetime,
    @p_Agents varchar(8000)
AS

SELECT  [cName]
      ,sum([nAnswered])     SumNAnswered
      ,sum([nAnsweredAcd])  SumNAnsweredAcd
      ,sum([tTalkAcd])      SumTTalkAcd
      ,sum([nHoldAcd])      SumNHoldAcd
      ,sum([tHoldAcd])      SumTHoldAcd
      ,sum([tAcw])          SumTAcw

FROM [I3_IC].[dbo].[IAgentQueueStats]

WHERE dIntervalStart between @p_StartDate and DATEADD(s, 86400-1, @p_EndDate)
  AND CHARINDEX ( cName ,@p_Agents)> 0
  AND cReportGroup <> '*'
  AND cHKey3 = '*' and cHKey4 ='*'
  AND nEnteredAcd > 0
  AND cReportGroup <> 'CCFax Email'
GROUP BY cName

そして、ここに2番目のものがあります:

/*** Aggregate values for Call Center Agents for status/activity time ***/
/*** The detail/row values is per start-time/end-time ***/
ALTER PROCEDURE [dbo].[sp_AgentActivity_Grouped]
    @p_StartDate datetime,
    @p_EndDate datetime,
    @p_Agents varchar(8000)
AS

SELECT  [UserId],[StatusCategory],SUM([StateDuration]) [StatusDuration] FROM
(
SELECT   
    [UserId]
    ,[StatusGroup]
    ,[StatusKey]
    , CASE [StatusKey]
        WHEN 'Available'            THEN 'Productive'
        WHEN 'Follow Up'            THEN 'Productive'
        WHEN 'Campaign Call'        THEN 'Productive'
        WHEN 'Awaiting Callback'    THEN 'Productive'
        WHEN 'In a Meeting'         THEN 'Not Your Fault'
        WHEN 'Project Work'         THEN 'Not Your Fault'
        WHEN 'At a Training Session'THEN 'Not Your Fault'
        WHEN 'System Issues'        THEN 'Not Your Fault'
        WHEN 'Test'                 THEN 'Not Your Fault'
        WHEN 'At Lunch'             THEN 'Non Productive'
        WHEN 'Available, Forward'   THEN 'Non Productive'
        WHEN 'Available, Follow-Me' THEN 'Non Productive'
        WHEN 'At Play'              THEN 'Non Productive'
        WHEN 'AcdAgentNotAnswering' THEN 'Non Productive'
        WHEN 'Do Not Disturb'       THEN 'Non Productive'
        WHEN 'Available, No ACD'    THEN 'Non Productive'
        WHEN 'Away from desk'       THEN 'Non Productive'
        ELSE [StatusKey]
    END StatusCategory
     ,stateduration
FROM [I3_IC].[dbo].[AgentActivityLog]
WHERE [StatusDateTime] between @p_StartDate and DATEADD(s, 86400-1, @p_EndDate)
    AND CHARINDEX ( [UserId] ,@p_Agents)> 0
    AND [StatusKey] not in ('Gone Home','Out of the Office','On Vacation','Out of Town')
) a 
GROUP BY [UserId],[StatusCategory]
ORDER BY [UserId], [StatusCategory] desc

ところで、あなたの投稿にコメント/返信するのに時間がかかる場合、それは興味の欠如ではなく、理解の欠如です...

これが私が望むレポートです: Rows: Person (= cNamein IAgentQueueStats= UserIdin AgentActivityLog)

列: からIAgentQueueStats:

sum([nAnswered]) 
sum([nAnsweredAcd])
sum([tTalkAcd])
sum([nHoldAcd])
sum([tHoldAcd])
sum([tAcw])

からAgentActivityLog

合計'Productive'

合計'Not Your Fault'

合計'Non Productive'

ただし'Productive''Not Your Fault''Non Productive'は行で繰り返される値であり、合計して列に「変換」する必要がある同じおよび値をAgentId持つ多くの行を意味することに注意してください。AgentId

複雑ですね…

4

2 に答える 2

1

基本結合

select IAgentQueueStats.*, AgentActivityLog.* 
from IAgentQueueStats 
join AgentActivityLog 
  on IAgentQueueStats.cName = AgentActivityLog.UserId 

それがスタートです。
そこから、この結合されたレポートに何を求めているかを知る必要があります。

基本的なグループを試す

select AgentActivityLog.UserId, AgentActivityLog.StatusCategory,SUM(AgentActivityLog.StateDuration),sum(IAgentQueueStats.nAnswered)     
    from IAgentQueueStats 
    join AgentActivityLog 
      on IAgentQueueStats.cName = AgentActivityLog.UserId 
Group By AgentActivityLog.UserId, AgentActivityLog.StatusCategory

グループ化はレポートで同じではないため、これを行う方法が明確ではありません。
1つは上記のようなものです。
もう 1 つは、2 つの group by に分割してから、その結果を結合することです。
レポートを定義するまで、どれがどれかを知ることはできません。

于 2012-12-18T16:54:23.233 に答える
0

1 つの SQL ステートメントでそれを行う方法が見つからなかったので、ストアド プロシージャでテンポラル テーブルを作成していくつかの手順で実行し、テンポラル テーブルを JOIN して、探していた結果を取得できるようにしました。

于 2013-01-01T02:16:47.483 に答える