2016-06-29 8 views
1

Ich versuche, das Problem mit SQL-Abfrage zu lösen, wo ich nächste Spalten habe: ITEM NUMBER und CROSS_REFFERENCE. ITEM NUMBER kann mehrere Werte von CROSS_REFFERENCE haben, und was ich brauche, ist sie zu zählen, was ich tun kann, indem ich nach gruppieren und nach Ausdruck zähle. Aber eine andere Sache, die ich brauche, ist eine Aussage, die besagt, dass, wenn die ITEM NUMMER mehr als eine CROSS_REFFERENCE als MULTI zurückgibt, andernfalls der Einzelwert von CROSS_REFFERENCE zurückgegeben wird, der an ITEM NUMBER gebunden ist. Ich habe versucht, diesen Ausdruck als neue coulmn usex:SQL-Aggregat-Ergebnisse als Bedingung in SELECT-Klausel verwenden

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

Aber wenn meine Ergebnisse kehrt ich nicht für CROSS_REFERENCE eindeutige Liste von ITEM NUMBER mit Ether MULTI oder Wert.

Irgendeine Idee was mache ich falsch?

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

wird nie so passieren. 'count()' ist eine Aggregatfunktion, deren Ergebnisse auf Zeilenebene nicht verfügbar sind. count() hat nur einen verwendbaren Wert, wenn ALLE Zeilen verarbeitet/berücksichtigt wurden. Sie können count() nicht zum Filtern auf Zeilenebene verwenden, da die Ergebnisse erst viel später zur Verfügung stehen - SQL Server können keine Zeitreisen durchführen. –

+0

Wenn Sie CROSS_REFERENCE zählen möchten, müssen Sie außerdem 'tbl_MFG_XREF.CROSS_REFERENCE' aus den SELECT- und den GROUP BY-Klauseln entfernen. – Andre

Antwort

0

Sie benötigen eine Basisabfrage:

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]; 

Statt First Sie auch Last oder Min oder Max verwenden können. FirstCROSS_REFERENCE wird nur verwendet, wenn nur ein CROSS_REFERENCE für einen Artikel vorhanden ist.

Speichern Sie diese Anfrage als. qryItemCountCrossref

Und eine zweite Abfrage, die es als Eingabe verwendet, z.

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

Vielen Dank dafür. es hat perfekt funktioniert. – Slavisha

Verwandte Themen