2010-12-14 8 views
0

Mit dieser Aussage:Expression von nicht-boolean Typ

select * from qvalues where rowid ,name,compound in (
    select rowid,name,compound from qvalues where rowid in (select rowid from batchinfo where instrument='tf1') 
    group by rowid,name,compound 
    having COUNT(*)>1 
    ) 
    group by rowid,name,compound 
having rid=min(rid) 

Dieser Fehler tritt auf:

Msg 4145, Ebene 15, Status 1, Zeile 3 Ein Ausdruck von Nicht-boolean-Typ angegeben in einem Kontext, in dem eine Bedingung erwartet wird, in der Nähe von ",". Nachricht 156, Ebene 15, Status 1, Zeile 8 Falsche Syntax in der Nähe des Schlüsselwortes 'group'.

Was ist falsch an dieser SQL-Anweisung? Ich muss alle Vorkommen dieser drei Felder in der Tabelle having min(rid) finden.

Aktualisieren Mit dieser Abfrage funktioniert die äußere Auswahl nicht. Was mache ich falsch?

select * from qvalues where rid not in (
select q.rowid, q.name, q.compound, min(q.rid) 
    from qvalues q 
     inner join batchinfo b 
      on q.rowid = b.rowid 
       and b.instrument = 'tf1' 
    group by q.rowid, q.name, q.compound 
    having count(*) > 1) 
+0

SQL Server Sie sagen? Und wo ist Linie 8? – gbn

+0

@gbn ja in der Tat –

Antwort

2

Ich denke, das entspricht dem, was Sie erreichen möchten.

+0

@joe vielen Dank für Ihre Hilfe. Ich habe eine weitere leichte Komplexität hinzugefügt. Kannst du bitte helfen? –

+0

Wenn mehrere Batchinfo-Zeilen für eine gegebene QValues-Zeile, dann erhalten Sie mehrere Zeilen bollixing u phaving count (*) – gbn

+0

@ gbn: Guter Fang. –

1

Die endgültigen having min(rid) Bedürfnisse Vergleich zu haben

dass sagen, gibt es keine zugehörigen GROUP BY die Sie sehen können, wenn Sie Ihr Code-Snippet

select * from qvalues 
where rowid ,name,compound in (
       select rowid,name,compound from qvalues 
       where rowid in (select rowid from batchinfo where instrument='tf1') 
       group by rowid,name,compound 
       having COUNT(*)>1 
       ) 
--missing group by 
having min(rid) -- > foo 

bearbeiten neu ordnen: umformuliert:

Und Ihr ursprünglicher Fehler kommt wahrscheinlich von al ack des Alias ​​der abgeleiteten Tabelle, gepaart mit der Tatsache, dass SQL Server kein mehrspaltiges IN unterstützt. Ich benutze EXISTS nicht JOIN, weil Sie möglicherweise mehr Zeilen von QValues ​​JOIN batchinfo bekommen als Sie erwarten (basierend auf Joes Antwort)

+0

@gbn danke ich habe aktualisiert –

+0

@gbn aktualisiert wieder –

+0

@gbn Msg 102, Ebene 15, Zustand 1, Zeile 16 Falsche Syntax in der Nähe von 'foo'. –