2017-03-09 19 views
0

間違っています。したがって、1つの行にはLOCA PARTB QTY 5があり、別の行にはLOCA PARTC QTY2があり、LOCB PARTX QTY3にはもう1つの行があります。行のQTY = 0の場合、その行は削除されます。SQLのSUMは、私は2つの場所のテーブルを持っている

Location | Part |QTY 
LOCA  | PARTB | QTY 5 
LOCA  | PARTC | QTY2 
LOCB  | PARTX | QTY3 

2私はパートがある場合にかかわらず存在する場所のすべての名前をリストし、別のテーブルを持っている):だから場所はもはや

LOCQTYS表この表に記載されません場合があります割り当てられたパーツはありません。

この表は、名前と説明を示しています。

LOCNames表:

LocName | Description 
LOCA | Storage 
LOCA | Storage 
LOCB | Base 

は、だから私は何の部品が割り当てられていない場合は、ユーザーとディスプレイ0にすべての場所を一覧表示しようとするか、割り当てられたすべての部品の合計を表示しています。

example: 
Loc1 30 
Loc2 12 
Loc3 0 
Loc4 6 

次のように私のSQL文は次のとおりです。問題は、カウントがオフになっている

sql = @"SELECT locnam, 
      Sum(locqty) 
      FROM (SELECT locnam, 
          locqty 
        FROM " + DatabaseUtility.LibraryList.I + @".locqtys 
        UNION 
        SELECT locdnam AS LOCNAM, 
          '0'  AS LOCQTY 
        FROM " + DatabaseUtility.LibraryList.I + @".locnames) R 
      GROUP BY locnam 
      ORDER BY locnam ASC"; 

...

So what should be, 
example: 
Loc1 30 
Loc2 12 
Loc3 0 
Loc4 6 

はビーイングを終わる:

example: 
Loc1 25 
Loc2 8 
Loc3 0 
Loc4 3 

総額は実際よりも低いです...私は何を間違っていますか?あなたがleft joinを探している

答えて

3

使用 "UNION ALL" ...連合は重複を排除します。

+0

そうでした!同じ場所と数で異なる行がある可能性があることを考慮に入れなかった...ありがとう! – eaglei22

1

:代わりに "UNION" の

select l.locnam, coalesce(sum(lp.locqty), 0) as locqty 
from locations l left join 
    locationparts lp 
    on lp.locnam = l.locnam 
group by l.locnam; 
+0

ありがとうございます。私は合体機能に慣れていませんでした。私はこれと一緒に遊ぶ必要があります。この場合は – eaglei22

+0

を使用することができます。合併機能またはifnull関数または大文字小文字の指示を使用することができます。 – Esperento57

0

これはあなたが探しているものですか? LOC値にテーブルLOC (位置はvarchar(10)、 部はvarchar(10)、 数量INT)

インサートを作成 ( 'LOCA'、 '部分A'、10)、 ( 'LOCA' LOCから、 '部分b'、20)、 ( 'locb'、 'パートc'、30)、 ( '10ccの'、 '部D'、 '')

セレクト位置、合計(数量)グループ単位でenter image description here

0

in Sql Sums「Isnull(column_name、0.00)」と「union all」を使用する

/------------------------/

SELECT isnull(locnam) as locnam, 
Sum(isnull(locqty,0.00) as locqty 
      FROM (SELECT isnull(locnam,0.00) as locnam 
          isnull(locqty,0.00) as locqty) 
        FROM " + DatabaseUtility.LibraryList.I + @".locqtys 
        UNION all 
        SELECT isnull(locdnam,0.00) AS LOCNAM, 
          '0.00'  AS LOCQTY 
        FROM " + DatabaseUtility.LibraryList.I + @".locnames) R 
      GROUP BY locnam 
      ORDER BY locnam ASC 
関連する問題