2016-05-06 3 views
0

月ごとに追加されるデータを持つクエリがありますが、SQLのあいまいなエラーが表示され、何をすべきかわかりません。私はどこでも研究して、私の問題への答えを見つけることができないのでここに行く!特定の月データを選択するときにあいまいな列があります

これはクエリです:

SELECT  REF.TOS        AS [TOS Value] 
     ,RSA_BELFAST_1921.Percentage   AS [Belfast] 
     ,RSA_BIRMINGHAM_1941$.Percentage  AS [Birmingham] 
     ,RSA_CARDIFFREGUS_2911$.Percentage  AS [Cardiff Regus] 
     ,RSA_CASTLEMEAD_1941$.Percentage  AS [Castlemead] 
     ,RSA_CHELMSFORD_1941$.Percentage  AS [Chelmsford] 
     ,RSA_EDNBGH_2951$.Percentage   AS [Edimburgh] 
     ,RSA_EUROPE_IOM_DOUG_2911$.Percentage AS [Europe] 
     ,RSA_GLASGOW_7301$.Percentage   AS [Glasgow] 
     ,RSA_GUERNSEY_ICICI_1921P$.Percentage AS [Guernsey] 
     ,RSA_HALIFAX_7301$.Percentage   AS [Halifax] 
     ,RSA_HORSHAM_1002$.Percentage   AS [Horsham] 
     ,RSA_IPSWICH_1921$.Percentage   AS [Ipswich] 
     ,RSA_LEEDS_2911$.Percentage    AS [Leeds] 
     ,RSA_LEICESTER_2951$.Percentage   AS [Leicester] 
     ,RSA_LIVERPOOL_1002$.Percentage   AS [Liverpool] 
     ,RSA_MANCHESTER_1941$.Percentage  AS [Manchester] 
     ,RSA_ONELONDON_1002.Percentage   AS [London] 
     ,RSA_PETERBOROUGH_3825.Percentage  AS [Peterborough] 
     ,RSA_REDHILL_2951.Percentage   AS [Redhill] 
     ,RSA_SUNDERLAND_1941$.Percentage  AS [Sunderland] 


FROM (SELECT TOS FROM RSA_BELFAST_1921   UNION 
     SELECT TOS FROM RSA_BIRMINGHAM_1941$  UNION 
     SELECT TOS FROM RSA_CARDIFFREGUS_2911$  UNION 
     SELECT TOS FROM RSA_CASTLEMEAD_1941$  UNION 
     SELECT TOS FROM RSA_CHELMSFORD_1941$  UNION 
     SELECT TOS FROM RSA_EDNBGH_2951$   UNION 
     SELECT TOS FROM RSA_EUROPE_IOM_DOUG_2911$ UNION 
     SELECT TOS FROM RSA_GLASGOW_7301$   UNION 
     SELECT TOS FROM RSA_GUERNSEY_ICICI_1921P$ UNION 
     SELECT TOS FROM RSA_HALIFAX_7301$   UNION 
     SELECT TOS FROM RSA_HORSHAM_1002$   UNION 
     SELECT TOS FROM RSA_IPSWICH_1921$   UNION 
     SELECT TOS FROM RSA_LEEDS_2911$   UNION 
     SELECT TOS FROM RSA_LEICESTER_2951$  UNION 
     SELECT TOS FROM RSA_LIVERPOOL_1002$  UNION 
     SELECT TOS FROM RSA_MANCHESTER_1941$  UNION 
     SELECT TOS FROM RSA_ONELONDON_1002   UNION 
     SELECT TOS FROM RSA_PETERBOROUGH_3825  UNION 
     SELECT TOS FROM RSA_REDHILL_2951   UNION 
     SELECT TOS FROM RSA_SUNDERLAND_1941$ 
     ) AS REF 

FULL OUTER JOIN RSA_BELFAST_1921   ON REF.TOS = RSA_BELFAST_1921.TOS 
FULL OUTER JOIN RSA_BIRMINGHAM_1941$  ON REF.TOS = RSA_BIRMINGHAM_1941$.TOS 
FULL OUTER JOIN RSA_CARDIFFREGUS_2911$  ON REF.TOS = RSA_CARDIFFREGUS_2911$.TOS 
FULL OUTER JOIN RSA_CASTLEMEAD_1941$  ON REF.TOS = RSA_CASTLEMEAD_1941$.TOS 
FULL OUTER JOIN RSA_CHELMSFORD_1941$  ON REF.TOS = RSA_CHELMSFORD_1941$.TOS 
FULL OUTER JOIN RSA_EDNBGH_2951$   ON REF.TOS = RSA_EDNBGH_2951$.TOS 
FULL OUTER JOIN RSA_EUROPE_IOM_DOUG_2911$ ON REF.TOS = RSA_EUROPE_IOM_DOUG_2911$.TOS 
FULL OUTER JOIN RSA_GLASGOW_7301$   ON REF.TOS = RSA_GLASGOW_7301$.TOS 
FULL OUTER JOIN RSA_GUERNSEY_ICICI_1921P$ ON REF.TOS = RSA_GUERNSEY_ICICI_1921P$.TOS 
FULL OUTER JOIN RSA_HALIFAX_7301$   ON REF.TOS = RSA_HALIFAX_7301$.TOS 
FULL OUTER JOIN RSA_HORSHAM_1002$   ON REF.TOS = RSA_HORSHAM_1002$.TOS 
FULL OUTER JOIN RSA_IPSWICH_1921$   ON REF.TOS = RSA_IPSWICH_1921$.TOS 
FULL OUTER JOIN RSA_LEEDS_2911$    ON REF.TOS = RSA_LEEDS_2911$.TOS 
FULL OUTER JOIN RSA_LEICESTER_2951$   ON REF.TOS = RSA_LEICESTER_2951$.TOS 
FULL OUTER JOIN RSA_LIVERPOOL_1002$   ON REF.TOS = RSA_LIVERPOOL_1002$.TOS 
FULL OUTER JOIN RSA_MANCHESTER_1941$  ON REF.TOS = RSA_MANCHESTER_1941$.TOS 
FULL OUTER JOIN RSA_ONELONDON_1002   ON REF.TOS = RSA_ONELONDON_1002.TOS 
FULL OUTER JOIN RSA_PETERBOROUGH_3825  ON REF.TOS = RSA_PETERBOROUGH_3825.TOS 
FULL OUTER JOIN RSA_REDHILL_2951   ON REF.TOS = RSA_REDHILL_2951.TOS 
FULL OUTER JOIN RSA_SUNDERLAND_1941$  ON REF.TOS = RSA_SUNDERLAND_1941$.TOS 

WHERE REF.TOS = 'ef (DSCP 46)' and [Report Date] = 'April 2016' 
ORDER BY [TOS Value] 

我々が先月これをやって開始し、クエリが細かい走っていた期待された結果生成して、我々はデータだけの価値は1ヶ月を持っていた:

TOS Value  Belfast Birmingham Report Date 
ef (DSCP 46) 0.14%  1.91%   March 2016 

しかし、今私たちはあいまいなエラーを取得する4月のデータを追加しました!

お願いします!私の質問で何が間違っていますか? また....私は月の "WHERE"パラメータを使わずにクエリを実行すると2番目のデータを追加しました。

+0

あなたの[レポート日]はどのテーブルから来ますか? – Shaneis

+0

Report_dateはどのテーブルから来ていますか? – Chanukya

+0

@Shaneisすべてのテーブルには、レポートデータという列があります。 –

答えて

4

おそらく、すべての結合に[Report Date]を含める必要があります。そうでなければ、デカルト積を得ることになり、結果は正しくなりません。私はコメントのカップルを行います

COALESCE(t1.[Report Date], t2.[Report Date], . . .) = 'April 2016' 

:一度これを行う

、次のようなロジックが必要になります

  • クエリを書くのは簡単にすることですので、あなたは表の別名を使用する必要があります読む。
  • 日付は、ISO標準形式(YYYY-MMなど)で保存する必要があります。
  • もっと重要なこと:データ構造が複雑すぎるように見えます。異なる都市にある同様のデータが異なるテーブルにあるように見えます。それはデータベースを設計するためのリレーショナルな方法ではありません。
  • full outer joinの広範な使用は、基礎をなすデータ構造にも問題を示唆しています。
+0

私はあなたのすべての点に同意します彼らが完璧な意味を持っているからです。仕事で私はこの仕事を私に割り当てました。私はSQLを使った初心者で、デザインやフォーマットについて考えることなく作業しなければならなかったものを作らなければなりませんでした。私はあなたの評判があなたを前もって見せてくれるが、依然としてクエリを修正してうまく動作するようにあなたの答えがうまくいくことを知っている。どのような変更を私は3時間の締め切りを満たしているので、どのようにクエリを見てください私に示すことができますか?前もって感謝します! –

+0

あなたはCOALESCEが必要ではないと思うので、[Report Date]を参考にRefに追加する必要があります。私は試して助けますが、OPは私たちが彼のためにコーディングすることを望んでいます。 – Paparazzi

+0

@パパラッチ私は壁にぶつかって、私は問題を解決する方法を知っていないとして私を助けることができれば本当に本当に素晴らしいだろうゴードン・ルノフannswは正しいですが、私はちょうど彼の提案をクエリに入れる方法を知らない。 –

関連する問題