2017-08-24 101 views
0

これはやや単純なはずですが、何らかの理由でこの問題を理解できません。値に応じて1つの表の列から別の表の列にデータを入れます

私の質問では、単純にいくつかのテーブルを結合し、それぞれからのデータを1つの小さな/簡潔なテーブルに入れています。しかし、それはLEGTYPE1と最初の行で問題になり、the FUNCTION a.LEGTYPE1 does not existと表示されます。

LEGTYPE1は、1または2のいずれかが格納されている 'a'テーブルの列です.1の場合はANSWERED = 1でインバウンド列の場合は '1'を入力する必要があります。値が「2」の場合はアウトバウンド列。

LEGTYPEの値が1と2の合計を取得する点を除いて、同じことをする別のテーブルで同様のクエリを実行していますが、正常に動作しますが、合計を使用していると思います。値そのものを入れる。ここで

クエリです:

Insert into test.AMBrawDataDump(
      Extension, 
      Start_Time, 
      End_Time, 
      Duration, 
      Inbound_Answered, 
      Missed, 
      Outbound, 
      Hold_Time) 
SELECT 
       c.extension -- USER EXTENSION 
      , b.STARTTIME -- Start of call 
      , b.ENDTIME -- End of call 
      , b.DURATION -- Length of call 
      , LEGTYPE1(if(LEGTYPE1 = 2,1,0) and ANSWERED = 1) -- Inbound answered calls 
      , b.ANSWERED(if(Answered = 1,0,1))     -- Missed Calls 
      , a.LEGTYPE1(IF(LEGTYPE1 = 1, 1, 0))     -- Outbound calls 
      , a.HOLDTIMESECS          -- Hold time in seconds 
FROM cdrdb.session a 
INNER JOIN cdrdb.callsummary b 
ON a.NOTABLECALLID = b.NOTABLECALLID 
INNER join cdrdb.mxuser c 
ON a.RESPONSIBLEUSEREXTENSIONID = c.EXTENSIONID 
WHERE b.ts BETWEEN curdate() - interval 90 day and curdate() 
AND c.extension IN (7276,7314,7295,7306,7357,7200,7218,7247,7331,7255,7330,7000,7215,7240,7358,7312) 
ORDER BY c.extension, DATE(b.ts); 

データ例:

enter image description here

インバウンドを埋めるこれは私だけでLEGTYPE値を置く場合、私が得るものですが、私はそれをしたいです2の場合は列、1の場合はアウトバウンド列。

LEGTYPE1はsmallint列です。

+0

を、あなたはサンプルデータを提供し、両方のテーブルの結果を期待していただけますか? –

+0

データの画像とその説明が更新されていれば更新します –

+0

あなたが探していたものはそれ以上でしたか? –

答えて

1

IF関数の戻り値を取得してLEGTYPE1という名前を付けようとしていますか?

現在の解決策が機能しない理由は、実際にフィールドである場合、LEGTYPE1を関数として使用しているためです。

あなたは、代わりに、このような何か行うことができます:

CASE WHEN a.LEGTYPE1 = 2 AND ANSWERED = 1 
THEN 1 ELSE 0 END AS YourFieldNameHere 
+0

これを実行しましたが、CASE状態のように0または1ではなくソーステーブル(1,2)の値を入れています –

+0

最新の変更のコードスニペットを私に提供できますか? –

関連する問題