1

2 つのテーブルから結果を取得するクエリに取り組んでいます。エントリごとに 5 つのレコード # または (DOC#) ではなく、エントリごとに 1 つのレコードで複数の結果を取得するために、同じテーブルに複数の内部結合がありました。

基本クエリの結果

Date    GL# AccountName AccountDesc Amount          Doc#    FieldG
00:00.0 51010   Account1    Description1    -3230.77    494634  TECH
00:00.0 51010   Account1    Description1    -3230.77    494634  220
00:00.0 51010   Account1    Description1    -3230.77    494634  SGA
00:00.0 51010   Account1    Description1    -3230.77    494634  TX
00:00.0 51010   Account1    Description1    -3230.77    494634  

同じテーブルに複数の内部結合がある場合

Date    GL# AccountName AccountDesc Amount   Doc#    
00:00.0 51010   Account1    Description1    -3230.77 494634 TECH 220 SGA TX

使用しているクエリ

SELECT 
GLE.Date
,GLE.GL# 
,GLE.AccountName
,GLE.AccountDesc
,GLE.Amount
,GLE.Doc#
,LED.FieldG
,LED2.FieldH
,LED3.FieldI
,LED4.FieldJ
,LED5.Unit 

FROM [Company, Inc$G_L Entry]  GLE
INNER JOIN [Company, Inc$Ledger Entry Dimension] LED
    ON GLE.[Doc#]=LED.[Doc#]
INNER JOIN [Company, Inc$Ledger Entry Dimension] LED2
    ON GLE.[Doc#]=LED2.[Doc#]
INNER JOIN [Company, Inc$Ledger Entry Dimension] LED3
    ON GLE.[Doc#]=LED3.[Doc#]
INNER JOIN [Company, Inc$Ledger Entry Dimension] LED4
    ON GLE.[Doc#]=LED4.[Doc#]
 JOIN [Company, Inc$Ledger Entry Dimension] LED5
    ON GLE.[Doc#]=LED5.[Doc#]



WHERE LED.Date Between '20120101' and '20130101'
AND GLE.[G_L Account No_]between '50000' and '59999'
AND GLE.GD1C between '0000' and '0999'
AND GLE.[Doc#]='494634' 
AND LED.[DC_1]='FieldG'
AND LED2.[DC_1]='FieldH'
AND LED3.[DC_1]='FieldI' 
AND LED4.[DC_1]='FieldJ'
AND LED5.[DC_1]='UNIT'
ORDER BY GLE.Date

結果を制限するためにテストできるように、特に DOC# にハード値を使用しています。このレコードの単位フィールドがあることはわかっていますが、それは空白です。クエリを実行すると、結果が返されません。一致するレコードがないため、LED5 テーブルに INNER JOIN を使用しているため、失敗していることがわかります。他のすべてのフィールドには必須のデータがあるため、失敗することはありません。初心者として、データを含み、空白のレコードを取得するには、このクエリで何を変更できますか? ありがとう。

4

1 に答える 1

1

最初に INNER JOIN を LEFT JOIN に変更し、WHERE 句を AND ISNULL(LED5.[DC_1],'UNIT')='UNIT' に変更します。

于 2012-12-13T18:18:12.927 に答える