はここに私のデータのモックアップだ: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 BY
でMFGR1
を含むことによって解決されるべき追加しました。
私の最後の努力は、(条件なしで)私の最初のクエリに基づいて構築された新しいクエリを作成することでした。
SELECT [Product Query].MFGR1, [Product Query].MFGR2
FROM [Product Query]
WHERE ((([Product Query].MFGR2)=Not ([Product Query].MFGR2)=([MFGR1])));
しかし、これはすべての行を消してしまいます。あなたの参加条件に[Products].MFGR <> [Products_1].MFGR
を追加
「HAVING」は使用しないでください。「WHERE」を使用してください。あなたの最初のアイデアはそれ以外に正しいものでした。 'WHERE [Products_1] .MFGR <> [PRODUCTS_1] .MFGR' – JNevill
@JNevill私は以下のAaronのソリューションを使用して終了しましたが、テストして同じ結果があることを確認しました。ありがとう:) – MrMusAddict
うん! INNER JOINを使用しているため、機能的には同等です。私はあなたが働いてうれしいです:) – JNevill