2011-06-29 6 views
0

私はこのようになりますクロス集計クエリを持っている:SQL/Access - 左結合の質問。値はどこから来ますか?

State   Building  1   2   3   4   5 

NY 

SC 

FL 

私が午前問題は、私はすべての状態にかかわらず、データが存在するか否かの、表示したいということです。だから、私は左結合が必要です。残念ながら、コード内でLeft JoinのInner Joinを代用すると、何も変わりません。私は、問題がどこから来ている把握しようとしています、と私はそれは、次の原因の一つかもしれないと思う:クエリは状態がある(から 値を引っ張ってどこか分からないん

  1. それは見ているところ

  2. 左クロスタブ クエリでは動作しません参加)に記載されているすべての は、ルックアップするが、これは ではないかもしれません。

私が間違っていることを教えてもらえますか?理想的には、私は(カラムは1〜10の値、現在指定されている)上記の文で行の値を指定することができ

TRANSFORM Nz(Count(Demographics.ID))+0 AS CountOfID 
SELECT Demographics.State 
FROM Research 
    INNER JOIN (Demographics 
     INNER JOIN [Status] 
      ON Demographics.ID=[Status].ID 
      ) 
     ON (Research.ID=Demographics.ID) 
     AND (Research.ID=[Status].ID) 
WHERE ((([Status].Building_Status)='Complete')) 
GROUP BY Demographics.State, 
      [Status].Building_Status 
PIVOT Research.Site In (1,2,3,4,5,6,7,8,9,10,11) 

が、私はこれを行うことができるとは思わない:ここでは

はSQLです。

+2

私たちにあなたのお問い合わせを表示してください! –

+0

試したサンプルクエリを提供できますか? –

+0

さて、私はSQLを投稿しました。申し訳ありませんが、私はまだそれが見栄えの良い場所でコードをフォーマットする方法を知りません。 – jerry

答えて

1

あなたの例は完全には得られませんでしたが、「データがあるかどうかにかかわらず、すべての州が表示されるように」というコメントから「OUTER」結合が必要です。外部結合はまさにそれを行います - それは "一致"があるかどうかにかかわらずデータを含みます。内部ジョイン(デフォルト)には、一致するものがある場合にのみデータが含まれます。

・ホープこれはあなたがそれをこのように変更する必要があり、 ジョン

+0

ちょっとジョン、私は上記のいくつかのSQLを追加し、実際には2つのインナー結合を持っています。両方に外部結合を適用しますか? – jerry

+0

申し訳ありません私は時間があまりなく、テーブル構造を知らなくてもすぐに伝えるのは少し難しいです。しかし、あなたが州を取得していない場合は、「人口統計」を「人口統計」を「人口統計」に変更してみてください。これは、人口統計データ(人口統計データは結果セットにNULLになります) – JohnD

+2

また、TRANSFORM、GROUP BY、およびPIVOT行を削除すると便利です。これをデバッグする際の混乱を避けるために、SELECTからWHEREに実行するだけで、 – JohnD

0

を支援します(たとえば、あなたの問題は国家=「NY」でテーブルの人口統計で0行があるかもしれないということであれば

TRANSFORM Nz(Count(Demographics.ID))+0 AS CountOfID 
    SELECT Demographics.State 
    FROM Demographics 
     LEFT JOIN (Research 
     LEFT JOIN [Status] 
       ON Demographics.ID=[Status].ID 
      ) 
      ON (Research.ID=Demographics.ID) 
      AND (Research.ID=[Status].ID) 
    WHERE ((([Status].Building_Status)='Complete')) 
GROUP BY Demographics.State, 
      [Status].Building_Status 
PIVOT Research.Site In (1,2,3,4,5,6,7,8,9,10,11) 
0

を)しかし、あなたは結果に州 'NY'を見たいと思っています。そして別のテーブルが必要です。これですべての状態を持っており、これはあなたの運転テーブルを作る国:

SELECT States.State 
FROM States 
    LEFT OUTER JOIN Demographics ON Demographics.state = States.state 
... 
0

次の2つのステップのソリューションを使用することができます(それは、より読みやすい)
は、最初として、あなたの実際の(と作業)のsqlなステートメントを囲みますビュー

create view step1 as 
TRANSFORM .... 
SELECT ... 
FROM ... 
PIVOT ... 

、その後、選択などの作成: を(@Tonyアンドリュースが言うようにあなたは、状態テーブルが必要になります)

select * -- or whatever 
from state 
left join step1 on state.id = step1.state 

それはすべてです

関連する問題