2017-12-04 8 views
0

私はいくつかの質問を似たように見て、自分の知識を適用してクエリが正しく動作するようにしようとしましたが、依然として私が望む結果を得られません。 私はDBから報告する必要がある5つのコール回線を持っています。問題は、そのうちの何人かが電話なしで1日に行くことができるということです。 0を報告するのではなく、単に線を引っ張るだけではありません。残念ながら、私は0データがないときに0を返します。

SELECT CASE [Campaign] 
WHEN '1' THEN 'Line A' 
WHEN '2' THEN 'Line B' 
WHEN '3' THEN 'Line C' 
WHEN '4' THEN 'Line D' 
WHEN '5' THEN 'Line E' 
ELSE 'Outbound Dialling' END AS [Line_name], 
COUNT(UniqueID) AS [Total Calls] 
FROM Telephone_Table 
WHERE [CallTime] BETWEEN '2017-12-01 00:00:00' AND '2017-12-01 23:59:59' 
AND [Campaign] IN ('402','403','404','405','406') 

の検索結果を置くためにそれを必要とするレポート目的:

Line_name | Campaign | Total Calls 
Line A  | 402  |  13 
Line B  | 403  |  11 
Line C  | 405  |  26 
Line E  | 406  |  178 

かなり頻繁にラインDは、コールを取得できません。それを0としてリストするのではなく、それを完全に見逃すでしょう。

私は次のことを試みたが、どれも働いていない: COUNT(一意ID)+1

CASEをCOUNT(一意ID)= '0' THEN 1つのELSEのCOUNT(一意ID)

私は別のものを作成しようとしたときテーブルには、これらの行だけで問題になっていたが、うまくいかなかった場合に「ケース・ア・イズ」を使用するのではなく、そこに名前を付けてDBに格納します。

いずれかの提案がありますか?ありがとうございました。ここで

答えて

0

は提案です:あなたが表示され、その後、カウントから1を減算したいグループごとにダミーを追加します。私は私の構文を混同している可能性があり

SELECT CASE [Campaign] 
    WHEN '402' THEN 'Line A' 
    WHEN '403' THEN 'Line B' 
    WHEN '404' THEN 'Line C' 
    WHEN '405' THEN 'Line D' 
    WHEN '406' THEN 'Line E' 
    ELSE 'Outbound Dialling' END AS [Line_name] 
    ,[Campaign] 
    ,COUNT(UniqueID)-1 AS [Total Calls] 
FROM 
    (SELECT [Campaign], [UniqueID] FROM Telephone_Table 
    WHERE [CallTime] BETWEEN '2017-12-01 00:00:00' AND '2017-12-01 23:59:59' 
     AND [Campaign] IN ('402','403','404','405','406') 
    UNION SELECT '402' AS [Campaign], 'DUMMY1' AS UniqueID 
    UNION SELECT '403' AS [Campaign], 'DUMMY2' AS UniqueID 
    UNION SELECT '404' AS [Campaign], 'DUMMY3' AS UniqueID 
    UNION SELECT '405' AS [Campaign], 'DUMMY4' AS UniqueID 
    UNION SELECT '406' AS [Campaign], 'DUMMY5' AS UniqueID) AS a 
GROUP BY [Campaign] 

、私は、SQLサーバーが手元にありませんチェックする瞬間ですが、この一般的なアイデアはうまくいくはずです。

関連する問題