2017-11-09 5 views
-1

ブランド名と注文数(ケース-1)を提供するSQLクエリがあります。SQLのフィールドにゼロを入力する

これで1時間のレポートを用意する必要がありますが、1時間のカウントがない場合は、特定のブランドは表示されません(ケース2)。

この場合、警告メールにbrand2にゼロが自動的に入力されるのはなぜですか?

サンプルSQL

SELECT distinct(brand), count(*) Hourly Count 
FROM table_name where date_time between systimestamp-1/24 and systimestamp 
GROUP BY brand; 

enter image description here

+0

あなたの質問を編集して、あなたのデータがどのようなものか、あなたが作り出したいものが何であるかを明確にしてください。サンプルデータをテキストテーブルとして提供することをお勧めします。現在のクエリを表示します。 –

+0

詳細を共有:) @GordonLinoff – jabbars

+0

あなたは一貫して各時間を表すことができますし、時間ごとにカウントを行うことができますので、参加するリファレンスセットを生成する必要があります。 – Vinnie

答えて

0

PLSのは、私が探していたものを下に見つけますために。

SELECT DISTINCT(BRAND_NAME),SUM(COUNT)FROM(
    SELECT distinct(BRAND_NAME) ,count(*) COUNT 
    FROM TABLE 
    UNION ALL 
     SELECT BRAND_NAME,0 AS COUNT 
    FROM (SELECT 'Brand1' AS BRAND_NAME FROM DUAL 
    UNION ALL 
    SELECT 'Brand2' AS BRAND_NAME FROM DUAL 
    UNION ALL 
    SELECT 'Brand3' AS BRAND_NAME FROM DUAL) 
    TEMP1) 
    TEMP2 
    GROUP BY BRAND_NAME 
    ORDER BY 1; 
0

まず、group byselect distinctを使用すると、(1列が不括弧で囲まれている。この場合には、確かではない)に必要なことはほとんどないさとの理解の欠如を示しています両方の構造物。あなたがやりたい

一つの方法は、条件付きの集約を使用することです:

SELECT brand, 
     SUM(CASE WHEN date_time between systimestamp-1/24 and systimestamp THEN 1 ELSE 0 END) as HourlyCount 
FROM table_name 
GROUP BY brand; 

もう一つの方法は、あなたがすべてのブランドを持つテーブルが前提としています

SELECT b.brand, count(t.brand) as HourlyCount 
FROM brands b LEFT JOIN 
    table_name 
    ON b.brand = t.brand AND 
     t.date_time between systimestamp-1/24 and systimestamp 
GROUP BY b.brand; 
関連する問題