2017-12-11 1 views
1

가 여기 내 데이터의 모형이다 :SQL 쿼리에 액세스 : 동일한 값의 두 개의 열을 만들지 만 열 1 = 열 2 인 경우를 어떻게 제외합니까?

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

이 데이터에서, I는 모든 가능한 "스왑"조합을 찾을 싶습니다. 내가 왔

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

예를 들어, 제품 A가 MFGR 1 마찬가지로, 제품 B가이에서 MFGR 1 또는 3에서 할 수있다 (2)에서 할 수있다, 나는 다음과 같은 테이블을 생성하고 싶습니다

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])));하지만 난 그것을 보려고 할 때 나는이 문서가 권장처럼 내가 GROUP BY MFGR1, MFGR2을 추가 HAVING clause [name] without grouping or aggregation.

를 얻을 수 있지만, 그때는 Your query does not include the specified expression 'MFGR1' as part of an aggregate function, but from what I see가,이 오류가 내 GROUP BYMFGR1을 포함하여 해결해야 얻을.

나의 초기 시도는 (조건없이) 초기 쿼리를 기반으로 작성된 새로운 쿼리를 작성하는 것이 었습니다. 여기에 대한 SQL은 다음과 같습니다.

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'를 사용하십시오. 당신의 첫 번째 아이디어는 그 외에 맞았습니다. '[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로 만들지 만 행은 여전히 ​​있습니다. 나는 그들을 제거하기위한 기준을 만들기 위해 디자인 뷰로 들어가 보았지만 디자인 뷰는'<> '연산자를 지원하지 않았고 기준을 처음부터 만들 수있을만큼 충분한 SQL을 알지 못합니다. 너는 알게 되니? – MrMusAddict

+0

방금 ​​LEFT JOIN을 JOIN으로 변경 한 것으로 나타났습니다. 나는 그것을 변경했으나 이제는 'FROM 절의 구문 오류'가 발생합니다. (그리고 내가 한 것은 'LEFT'이라는 단어를 지우는 것뿐입니다.) – MrMusAddict

+0

알았어! 'INNER JOIN'으로 바꾸고 싶었어. null 값이 제거되었습니다 :) 감사합니다! – MrMusAddict