2017-10-17 9 views
0

Tabellen haben folgende Struktur: groupTable> lineGroupJoinTable> linesTable (Name Namen verschleierten) Ich habe die folgende Abfrage, die diesen Fehler zurückgibt:Unexpected „Unterabfrage gab mehr als 1 Wert“

Subquery returned more than 1 value. This is not permitted when the subquery follows =, !=, <, <= , >, >= or when the subquery is used as an expression.

Die Sache ist, dass Ich erwarte, dass, da die Unterabfrage Gruppe ist, ich diesen Fehler nicht bekommen sollte. Vermutlich vermisse ich etwas.

UPDATE dbo.groupTable 
SET fieldToUpdate = CASE WHEN fieldToUpdate IS NULL THEN NULL ELSE 
(
    SELECT sumTable.fieldToSum FROM 
    dbo.groupTable gt 
    INNER JOIN 
    (
     SELECT lgjt.groupdId1, lgjt.groupdId2, SUM(lt.fieldToSum) as fieldToSum 
     FROM lineGroupJoinTable lgjt 
     INNER JOIN linesTable lt 
      ON 
       lt.fieldToSum IS NOT NULL AND lt.fieldToSum > 0 AND 
       lgjt.lineId1 = lt.lineId1 AND lgjt.lineId2 = lt.lineId2 
     GROUP BY lgjt.groupdId1, lgjt.groupdId2 

    ) sumTable 
    ON sumTable.groupdId1 = gt.groupdId1 AND sumTable.groupdId2 = gt.groupdId2 
) 
END 

Diese Variante wurde auch versuchen, einen Vorschlag folgt aber den gleichen Fehler zurück:

UPDATE dbo.groupTable 
SET fieldToUpdate = CASE WHEN fieldToUpdate IS NULL THEN NULL ELSE 
(
    SELECT SUM(sumTable.fieldToSum) FROM 
    dbo.groupTable gt 
    INNER JOIN 
    (
     SELECT lgjt.groupdId1, lgjt.groupdId2, SUM(lt.fieldToSum) as fieldToSum 
     FROM lineGroupJoinTable lgjt 
     INNER JOIN linesTable lt 
      ON 
       lt.fieldToSum IS NOT NULL AND lt.fieldToSum > 0 AND 
       lgjt.lineId1 = lt.lineId1 AND lgjt.lineId2 = lt.lineId2 
     GROUP BY lgjt.groupdId1, lgjt.groupdId2 

    ) sumTable 
    ON sumTable.groupdId1 = gt.groupdId1 AND sumTable.groupdId2 = gt.groupdId2 
    GROUP BY gt.groupdId1, gt.groupdId2 
) 
END 

Antwort

0

Wahrscheinlich, weil dbo.groupTable mehrere Werte für die Kombination id1 und id2 hat. Ich schlage vor, in der Spalte ID1 und ID2 zu gruppieren und eine SUMME zu machen. In diesem Fall haben Sie nur 1 Ergebnis.

UPDATE dbo.groupTable 
SET fieldToUpdate = CASE WHEN fieldToUpdate IS NULL THEN NULL ELSE 
(
    SELECT SUM(sumTable.fieldToSum) FROM 
    dbo.groupTable gt 
    INNER JOIN 
    (
     SELECT lgjt.id1, lgjt.id2, SUM(lt.fieldToSum) as fieldToSum 
     FROM lineGroupJoinTable lgjt 
     INNER JOIN linesTable lt 
      ON 
       lt.fieldToSum IS NOT NULL AND lt.fieldToSum > 0 AND 
       lgjt.id3 = lt.id3 AND lgjt.id4 = lt.id4 
     GROUP BY lgjt.id1, lgjt.id2 
    ) sumTable 
    ON sumTable.id1 = gt.id1 AND sumTable.id2 = gt.id2 
    GROUP BY gt.id1, gt.id2 
) 
END 
+0

Ich versuchte dies, Ergebnis ist ähnlich. Und da ID1 und ID2 ein Primärschlüssel sind, erwarte ich nicht, mehrere Zeilen mit ID1, ID2-Paar zu haben. – TTT

Verwandte Themen