2016-06-29 1 views
1

다음 열이있는 SQL 쿼리에서이 문제를 해결하려고합니다 : ITEM NUMBER 및 CROSS_REFFERENCE. ITEM NUMBER에는 CROSS_REFFERENCE의 값이 여러 개있을 수 있으며 필요한 것은 그룹화하고 표현식으로 계산하여 계산할 수 있습니다. 하지만 필요한 또 다른 사항은 ITEM NUMBER에 MULTI를 반환하는 것보다 CROSS_REFFERENCE가 두 개 이상있는 경우, 그렇지 않으면 ITEM NUMBER에 연결된 CROSS_REFFERENCE의 단일 값을 반환하는 경우입니다. 나는 새로운 coulmn로이 식을 usex하려고 :SQL 집계 결과를 SELECT 절의 조건으로 사용

MFG: IIf(Count([CROSS_REFERENCE])>1,"MULTI",[CROSS_REFERENCE]) 

하지만 내 결과를 반환 내가 에테르 MULTI와 항목 번호의 고유 한 목록을 해달라고, 또는 CROSS_REFERENCE 가치 때.

내가 뭘 잘못하고 있니? 당신은 또한 마지막 또는 최소 또는 최대를 사용할 수 있습니다

SELECT 
    [ITEM NUMBER], 
    Count(CROSS_REFERENCE) AS CountOfCROSS_REFERENCE, 
    First(CROSS_REFERENCE) AS FirstCROSS_REFERENCE 
FROM 
    tbl_MFG_XREF 
GROUP BY 
    tbl_MFG_XREF.[ITEM NUMBER]; 

대신 First의 :

Query design

SELECT 
tbl_MFG_XREF.[ITEM NUMBER], 
tbl_MFG_XREF.CROSS_REFERENCE, 
Count(tbl_MFG_XREF.CROSS_REFERENCE) AS CountOfCROSS_REFERENCE, 
IIf(Count([CROSS_REFERENCE])>1,"MULTI",[CROSS_REFERENCE]) AS MFG 
FROM 
tbl_MFG_XREF 
GROUP BY 
tbl_MFG_XREF.[ITEM NUMBER], tbl_MFG_XREF.CROSS_REFERENCE; 
+2

그런 일은 결코 일어나지 않을 것입니다. 'count()'는 집계 함수이며 그 결과는 행 수준에서 사용할 수 없습니다. count()는 모든 행을 처리/고려한 경우에만 사용 가능한 값을 갖습니다. 행 수준에서 필터링하기 위해 count()를 사용할 수 없습니다. 왜냐하면 그 결과가 나중에는 사용할 수 없기 때문입니다. SQL 서버가 시간 이동을 할 수 없기 때문입니다. –

+0

또한 CROSS_REFERENCE를 계산하려면 SELECT 및 GROUP BY 절 모두에서'tbl_MFG_XREF.CROSS_REFERENCE'를 제거해야합니다. – Andre

답변

0

당신은 기본 쿼리가 필요합니다. FirstCROSS_REFERENCE은 항목에 CROSS_REFERENCE가 하나만있는 경우에만 사용됩니다.

이 쿼리를 예 : qryItemCountCrossref

입력으로 사용하는 두 번째 쿼리입니다 (예 :

SELECT 
    [ITEM NUMBER], 
    CountOfCROSS_REFERENCE, 
    IIf(CountOfCROSS_REFERENCE > 1, "MULTI", FirstCROSS_REFERENCE) AS MFG 
FROM qryItemCountCrossref 
+0

고맙습니다. 그것은 완벽하게 작동했습니다. – Slavisha