-2

私は2つのテーブルを持っています。1 つは、これら 3 つのレコードだけで日のカテゴリを保持します (以下に表示DIS.csv)。もう一方には、返したい財務データが含まれています ( VAU.csv)。

VAU.csv
ID    WORDING  
1     30 - 59 Days  
2     60 - 89 Days  
3     90+  Days   

であっても、常に 3 つのレコードが返されるようにし60 - 59ます0。以下の SQL ステートメントは、1 つのレコードのみが見つかった場合、1 行のみを返します。必要に応じて、カウント 0 と値 0 が設定された 3 行すべてが返されるようにしたいと考えています。

SELECT  DIS.DISWORDING, 
        Count(VAU.ITEM), 
        Sum(VAU.VALUE) 

FROM    DIS.csv DIS 
        LEFT JOIN VAU.csv VAU ON DIS.ID = VAU.ID 

WHERE   VAU.TYPE = 'TRADE' 

GROUP   BY DIS.DISWORDING
4

2 に答える 2

1

http://sqlfiddle.com/#!2/d005f/16/0

SQLフィドルのテーブル名を変更しました。私はそれらを正しく元に戻したと思います....

select  dis.diswording, 
        count(vau.item) as item_count, 
        coalesce(sum(vau.value),0) as value_sum

from    dis.csv as dis  

        left join vau.csv as vau 
           on dis.id = vau.id and vau.type = 'trade'  

group   by dis.diswording;

あなたはほとんどそれを正しく持っていました。の条件はステートメントでtype='trade'発生する必要があり、 でダウンする必要はありません。は、すべての行と、それらが一致する行のみが必要であることを示しています。それを理解するのに1分かかりましたが、どこにあるのかによってデータの一部が失われていました. joinwhereleft outer joindis.csvvau.csvtype='trade'

次のように考えることもできます。

select  dis.diswording, 
        count(vau.item) as item_count, 
        coalesce(sum(vau.value),0) as value_sum

from    dis.csv as dis  

        left join (select *
                   from   vau.csv 
                   where  vau.type = 'trade') as vau 
           on dis.id = vau.id 

group   by dis.diswording;

編集
代わりにcoalesce(sum(vau.value),0) as value_sum試すことができます:
Nz(sum(vau.value),0) as value_sum

  • 正確で完全なエラーを教えてください(質問を更新できます)。クエリを書き直す方法はいくつかあるので、受け入れ可能なものに切り替えることは可能だと確信しています。Jet/Excel/Office は少し奇妙で厄介です。これらのクエリを提供する前に、実際の環境でこれらのクエリをテストする方法はありません。

DB に問題があるクエリの部分がわかりません。これも機能します:
合体を Nz に置き換えてみてください

select  dis.diswording, 
        sum(case when vau.type='trade' 
                   then 1 else 0 end) as item_count, 
        coalesce(sum(case when vau.type='trade' 
                          then vau.value 
                          else 0 end),0) as value_sum

from    dis.csv as dis  

        left join vau.csv as vau 
           on dis.id = vau.id  

group   by dis.diswording;

トラブルシューティングを試して、その一般的なエラーが発生するクエリの部分を確認できますか? 部分を削除してクエリをできるだけ単純にするだけです...次に何かを追加してください。問題を特定できるかどうかを確認してください。

  1. これは実行されますか?(最も基本的な形を試してください)

      select  dis.id, dis.diswording,
              vau.item, vau.value, vau.type
    
       from   dis.csv as dis  
    
              left join vau.csv as vau 
                 on dis.id = vau.id 
    
  2. これは実行されますか?(結合で取引をフィルタリングしてみてください)

      select  dis.id, dis.diswording,
              vau.item, vau.value, vau.type
    
       from   dis.csv as dis  
    
              left join vau.csv as vau 
                 on dis.id = vau.id and vau.type='trade'
    
  3. これは実行されますか?(ネストされた選択を試してください)

      select  dis.id, dis.diswording,
              vau.item, vau.value, vau.type
    
       from   dis.csv as dis  
    
              left join (select * from vau.csv where type='trade') as vau 
                 on dis.id = vau.id  
    
  4. これは実行されますか?(#1が機能したと仮定して、機能するクエリに合計/カウントを追加します)

      select  dis.id, dis.diswording,
              count(vau.item) as item_count, 
              sum(vau.value)  as vaue_sum 
    
       from   dis.csv as dis  
    
              left join vau.csv as vau 
                 on dis.id = vau.id
    
       group by dis.id, dis.diswording 
    

そして、それを続けて問題が何であるかを確認してください...使用したいクエリをゆっくりと構築してください。一般的なエラーは、DB がサポートしていないことをしようとしていることを意味します。存在しない関数を使用すると、おそらく構文エラーになります。

于 2013-11-03T16:16:52.630 に答える
0

ご協力いただきありがとうございます。ご提供いただいた各ステップを順を追って説明する中で、MSQuery では IIF ステートメントを使用する必要があることがわかりました。その結果、以下のコードが得られました。TYPE を CHASSIS に、VALUE を SIV に変更しましたが、データベースを読みやすくするためだけです。繰り返しになりますが、次のページをクリックするのがとても簡単なときに、見知らぬ人を助けるあなたのような人々に本当に感謝しています.

"SELECT DIS.DISWORDING, COUNT(VAU.CHASSIS), IIF(SUM(VAU.SIV) IS NULL, 0, SUM(VAU.SIV)) AS SUM FROM DIS.csv AS DIS LEFT JOIN (SELECT * FROM VAU.csv AS VAU WHERE VAU.VEHICLETYPE ='TRADE') AS VAU ON DIS.DISID = VAU.DISID DIS.DISID、DIS.DISWORDING によるグループ"

ところで、最近の出来事を聞いて本当に申し訳ありませんが、あなたのホームページを読んでください。ゲームの先を行き、あなたの周りのすべての人のためにそこにいてください...乾杯

于 2013-11-04T18:28:12.263 に答える