2016-06-29 3 views
1

次の列を持つSQLクエリでこの問題を解決しようとしています: ITEM NUMBERおよびCROSS_REFFERENCE。 ITEM NUMBERは複数のCROSS_REFFERENCEの値を持つことができます。私が必要とするのは、グループ化して式で数えることでできることを数えることです。しかし、もう一つ必要なのは、ITEM NUMBERにMULTIを返すより複数のCROSS_REFFERENCEがある場合は文、それ以外の場合はITEM NUMBERに結び付けられたCROSS_REFFERENCEの単一の値を返すという文です。 は、私は新しいcoulmnとしてこの式をusexしようとした:SELECT句の条件としてSQL集計結果を使用する

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

しかし、私の結果を返しますが、私は、エーテルMULTIと項目番号のユニークなリストを取得いけない、またはCROSS_REFERENCEの値とき。

何が間違っているのですか?

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

あなたはベースのクエリが必要になります。

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あなたも最終またはminまたはmaxを使用することができます。 FirstCROSS_REFERENCEは、アイテムにCROSS_REFERENCEが1つしかない場合にのみ使用されます。

このクエリを次のように保存します。 qryItemCountCrossref

これを入力として使用する2番目のクエリ。

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

ありがとうございます。それは完全に働いた。 – Slavisha

関連する問題