2017-12-11 14 views
1

はここに私のデータのモックアップだ:SQLクエリへのアクセス:同じ値の2つの列を作成しますが、列1 =列2の場合をどのように除外しますか?

Product || MFGR 
    A  || 1 
    A  || 2 
    B  || 1 
    B  || 3 

このデータから、私は、任意およびすべての可能な「スワップ」の組み合わせを見つけるしたいと思います。例えば、製品AはMFGR 1または同様に2、製品Bで行うことができ、このことからMFGR 1または3で行うことができ、私は次の表を生成したいと思います:

MFGR1 || MFGR2 
    1 || 2  \______ Swaps for Product A 
    2 || 1 /
    1 || 3  \______ Swaps for Product B 
    3 || 1 /

私が得ています

SELECT DISTINCT 
    [Products].MFGR AS MFGR1, 
    [Products_1].MFGR AS MFGR2 
FROM [Products] 
    LEFT JOIN [Products] AS [Products_1] ON [Products].[Product] = [Products_1].[Product]; 

しかし、これは予想通り報告例MFGR1 = MFGR2:

MFGR1 || MFGR2 
    1 || 1 ← want removed 
    1 || 2 
    2 || 1 
    2 || 2 ← want removed 
    1 || 3 
    3 || 1 
    3 || 3 ← want removed 

Fiが以下のSQLと非常に近いです私が最初にやったのはDesign Viewに入っていて、=Not(MFGR1)の基準をMFGR2に追加したことです。つまり、このSQLを生成:HAVING ((([Products_1].MFGR)=Not ([PRODUCTS_1].MFGR)=([MFGR1])));が、私はそれを表示しようとすると、私はHAVING clause [name] without grouping or aggregation.

を取得し、私はこの記事のようなGROUP BY MFGR1, MFGR2は推奨していますが、その後、私はYour query does not include the specified expression 'MFGR1' as part of an aggregate functionを取得し、but from what I see、このエラーは私のGROUP BYMFGR1を含むことによって解決されるべき追加しました。

私の最後の努力は、(条件なしで)私の最初のクエリに基づいて構築された新しいクエリを作成することでした。

SELECT [Product Query].MFGR1, [Product Query].MFGR2 
FROM [Product Query] 
WHERE ((([Product Query].MFGR2)=Not ([Product Query].MFGR2)=([MFGR1]))); 

しかし、これはすべての行を消してしまいます。あなたの参加条件に[Products].MFGR <> [Products_1].MFGRを追加

+1

「HAVING」は使用しないでください。「WHERE」を使用してください。あなたの最初のアイデアはそれ以外に正しいものでした。 'WHERE [Products_1] .MFGR <> [PRODUCTS_1] .MFGR' – JNevill

+0

@JNevill私は以下のAaronのソリューションを使用して終了しましたが、テストして同じ結果があることを確認しました。ありがとう:) – MrMusAddict

+0

うん! INNER JOINを使用しているため、機能的には同等です。私はあなたが働いてうれしいです:) – JNevill

答えて

2

試してみてください。

SELECT DISTINCT 
    [Products].MFGR AS MFGR1, 
    [Products_1].MFGR AS MFGR2 
FROM [Products] 
INNER JOIN [Products] AS [Products_1] ON [Products].[Product] = [Products_1].[Product] 
           AND [Products].MFGR <> [Products_1].MFGR; 

は、結果セットにNULL値の束を防ぐためにあなたのLEFT JOININNER JOINに変更。私はこれがあなたがそれを望む方法だと思います。

+0

これは私がそこに半分を取得します。 MFGR2の重複エントリはnullになりますが、行はまだそこにあります。私はそれらを削除するための基準を作るためにデザインビューに行きましたが、デザインビューは '<>'演算子をサポートしていませんでした。あなたは知ってもらえますか? – MrMusAddict

+0

「LEFT JOIN」を「JOIN」に変更したことに気がつきました。私はそれを変更しましたが、今は 'FROM句に構文エラーがあります。'(そして、私が行ったのは、 'LEFT'という単語を削除することです) – MrMusAddict

+0

これを取得しました! null値は削除されました:)ありがとう! – MrMusAddict

関連する問題