2016-04-04 10 views
-1

Wenn ich schreibe die unten stehende AbfrageWie schreibe ich eine Unterabfrage innerhalb der Join-Abfrage?

SELECT Op.MRNO, 
     M.PatientName, 
     (
      SELECT COUNT(MRNO) AS Visit 
      FROM HMS_Reg_OPRegister 
      GROUP BY MRNO 
     ) 
FROM HMS_Reg_Patient M, 
    HMS_Reg_OPRegister Op 
WHERE Op.MRNO = M.MRNO 

ich diesen Fehler hätte:

Msg 512, Level 16, State 1, Line 14 Subquery returned more than 1 value. This is not permitted when the subquery follows =, !=, <, <=, >= or when the subquery is used as an expression.

+0

Ich bekomme nicht, was Sie versuchen zu tun, Was ist Ihre gewünschte Ausgabe? Kannst du uns die Tabellenstrukturen geben? – Ramkee

+2

Sie sollten wahrscheinlich einen Blick auf diesen Artikel werfen, obwohl dieser nicht direkt mit Ihrer Frage in Verbindung steht. http://sqlblog.com/blogs/aaron_bertrand/archive/2009/10/08/bad-habits-to-kick-using-old-style-joins.aspx –

Antwort

1
SELECT Op.MRNO, 
     M.PatientName, 
     Op.Visit 
FROM dbo.HMS_Reg_Patient M 
JOIN (
    SELECT MRNO, COUNT(MRNO) AS Visit 
    FROM dbo.HMS_Reg_OPRegister 
    GROUP BY MRNO 
) Op ON Op.MRNO = M.MRNO 
1

Es sieht aus, als ob Sie wollen:

SELECT M.MRNO, 
     MAX(M.PatientName) AS PatientName, 
     COUNT(*) AS Visit 
FROM HMS_Reg_Patient M 
JOIN HMS_Reg_OPRegister Op ON Op.MRNO = M.MRNO 
GROUP BY M.MRNO 

Es ist nicht notwendig, eine zu verwenden, Unterabfrage, um die Anzahl der Werte in einer Gruppe zu zählen, wenn Sie bereits die Tabelle haben, die Sie in der m zählen eine Abfrage.

+0

Yup, ich verstehe dich. So kamen wir zu den Tischen. Aber ich verstehe nicht, wo er die Tabellen in seiner Frage beigetreten ist – Ramkee

+1

@Ramkee: In der Frage verwendet das OP die ältere, implizite Joinsyntax - wo Tabellen zusammen aufgelistet sind, getrennt durch Kommas, und die Join-Bedingungen sind in der WHERE-Klausel. Der verlinkte Artikel in Seans Kommentar zu dieser Frage erweitert dies. –

+1

Ohh .. Danke! – Ramkee

Verwandte Themen