error : Subquery returns more than 1 row

Antwort erstellen


BBCode ist eingeschaltet
[img] ist ausgeschaltet
[url] ist eingeschaltet
Smileys sind ausgeschaltet

Die letzten Beiträge des Themas
   

Ansicht erweitern Die letzten Beiträge des Themas: error : Subquery returns more than 1 row

Re: error : Subquery returns more than 1 row

von AndreasJBittner » So, 01.08.2010 20:17

Hallo,

naja, sagt doch die Fehlermeldung, Du bekommst von Deiner subquery mehr als eine Zeile zurück, damit ist das statement nicht mehr eindeutig. Führe die mal für sich aus und Du wirst sehen, daß Du mehrere Zeilen zurück erhältst, dann änderst Du sie so, daß nur noch eine Zeile und möglichst die richtige zurückgegeben wird - voila.

Grüße
Andreas

Re: error : Subquery returns more than 1 row

von heinz_ketchup » So, 01.08.2010 14:41

Hallo zusammen,

danke Andreas, ich habe den Subquery nun einfach in Klammern gesetzt und jetzt bekomme ich wenigstens keinen Syntaxerror mehr.

Code: Alles auswählen

# Ermittelt Planfaktoren für Erlösschmälerungen und
# variable Kosten in Relation zu aktuellen Ist-Werten

SET @basisjahr = 2010;

INSERT INTO planfaktor_test (pf_ktonr, pf_kstnr, pf_text, pf_wert, pf_monat, pf_jahr)

SELECT 
	konten.ktoa_nr + 10000, 
	id_kst_dt,
	CONCAT('Plan ', ktoa_bezeichnung),
	SUM(id_wert) / (
	
	SELECT summe_id_wert FROM 
	(
	SELECT 
		SUM(id_wert) AS summe_id_wert,
		id_kst_dt
	FROM istdaten, konten 
	WHERE id_jahr = @basisjahr AND id_ktonr = kto_nr AND konten.ktoa_nr BETWEEN 2 AND 20
	GROUP BY id_kst_dt 
	) AS t1 
	WHERE t1.id_kst_dt = id_kst_dt),

	id_monat, 
	id_jahr + 1

FROM istdaten, konten, kostenstellen, kontenart 
WHERE id_jahr = @basisjahr AND id_ktonr = kto_nr AND konten.ktoa_nr = kontenart.ktoa_nr
GROUP BY id_kst_dt
Leider bekomme ich jetzt wieder die Fehlermeldung:
error : Subquery returns more than 1 row
Wo könnte nun mein Fehler liegen?

Danke und schöne Grüße
Werner

Re: error : Subquery returns more than 1 row

von AndreasJBittner » Sa, 31.07.2010 15:59

Hallo,

der Ausdruck nach Deinem Bruchstrich / ist nicht weiter geklammert, vielleicht liegt es daran.

Grüße
Andreas

Re: error : Subquery returns more than 1 row

von heinz_ketchup » Sa, 31.07.2010 10:46

Hallo Barlee,

schön von Dir zu hören und vielen Dank für Deine Hilfe.

Du hast genau mein Problem erkannt und Deine Lösung wird funktionieren, wenn ich meinen Syntaxerror gefunden habe. Kannst Du bitte nochmal einen Blick auf meine Query werfen:

Code: Alles auswählen

# Ermittelt Planfaktoren für Erlösschmälerungen und
# variable Kosten in Relation zu aktuellen Ist-Werten

SET @basisjahr = 2010;

INSERT INTO planfaktor_test (pf_ktonr, pf_kstnr, pf_text, pf_wert, pf_monat, pf_jahr)

SELECT 
	konten.ktoa_nr + 10000, 
	id_kst_dt,
	CONCAT('Plan ', ktoa_bezeichnung),
	SUM(id_wert) /
	
	SELECT summe_id_wert FROM 
	(
	SELECT 
		SUM(id_wert) AS summe_id_wert,
		id_kst_dt
	FROM istdaten, konten 
	WHERE id_jahr = @basisjahr AND id_ktonr = kto_nr AND konten.ktoa_nr BETWEEN 2 AND 20
	GROUP BY id_kst_dt 
	) AS t1 
	WHERE t1.id_kst_dt = id_kst_dt,

	id_monat, 
	id_jahr + 1

FROM istdaten, konten, kostenstellen, kontenart 
WHERE id_jahr = @basisjahr AND id_ktonr = kto_nr AND konten.ktoa_nr = kontenart.ktoa_nr
GROUP BY id_kst_dt
Ich bekomme immer diese Fehlermeldung:
error : You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'SELECT summe_id_wert FROM
(
SELECT
SUM(id_wert) AS summe_id_wert,
id_kst' at line 9
Vielleicht findest Du ja meinen Fehler. Ich habe auch schon mit verschiedenen Klammern gearbeitet, hat aber nichts gebracht.

Danke und viele Grüße
Werner

Re: error : Subquery returns more than 1 row

von Barlee » Fr, 30.07.2010 23:27

Hallo Werner,
Ich habe natürlich meine Subquery auch getestet. Und ja richtig die liefert die Summe der Umsätze von jeder Kostenstelle. Und genau da liegt dann wohl mein Denkfehler.
Ja, denn kritisch in diesem Fall ist "von jeder Kostenstelle", obwohl nur eine Kostenstelle im aktuellen Ausgabedatensatz vorhanden sein kann. Du musst jetzt also lediglich die Unterabfrage so einschränken, dass die Daten nur der jeweils aktuellen Kostenstelle zurückgegeben werden.

Ich würde folgenden Teil umbauen, da er mehrere Kostenstellen ausgibt:

Code: Alles auswählen

   
...
SELECT
      SUM(id_wert)
   FROM istdaten, konten
   WHERE id_jahr = @basisjahr AND id_ktonr = kto_nr AND konten.ktoa_nr BETWEEN 2 AND 20
   GROUP BY id_kst_dt ) AS t1, 
...
ungefähr (ungetestet) so:

Code: Alles auswählen

   
...
SELECT summe_id_wert FROM
(
SELECT
SUM(id_wert) AS summe_id_wert, 
id_kst_dt
FROM istdaten, konten
WHERE id_jahr = @basisjahr AND id_ktonr = kto_nr AND konten.ktoa_nr BETWEEN 2 AND 20
GROUP BY id_kst_dt 
) AS t1
WHERE t1.id_kst_dt = id_kst_dt, 
...
Vielleicht kannst Du aus diesem Ansatz eine Lösung ableiten.
Viel Erfolg & viele Grüße,

Barlee

error : Subquery returns more than 1 row

von heinz_ketchup » Fr, 30.07.2010 18:42

Hallo,

ich brauch wieder mal eure Hilfe. Sicherlich habe ich einen Denkfehler beim Aufbau meiner Abfrage.

Ich möchte einen Faktor pro Kostenstellen-Nr und Konto ermitteln, der den Anteil der Kontensumme in Relation zum Umsatz ausweist.

Planfaktor = ∑ Konto / ∑ Umsatz

Code: Alles auswählen

SET @basisjahr = 2010;

INSERT INTO planfaktor_test (pf_ktonr, pf_kstnr, pf_text, pf_wert, pf_monat, pf_jahr)

SELECT 
	konten.ktoa_nr + 10000, 
	id_kst_dt,
	CONCAT('Plan ', ktoa_bezeichnung),
	SUM(id_wert)/(

	SELECT 
		SUM(id_wert) 
	FROM istdaten, konten 
	WHERE id_jahr = @basisjahr AND id_ktonr = kto_nr AND konten.ktoa_nr BETWEEN 2 AND 20
	GROUP BY id_kst_dt ) AS t1, 

	id_monat, 
	id_jahr

FROM istdaten, konten, kostenstellen, kontenart 
WHERE id_jahr = @basisjahr AND id_ktonr = kto_nr AND konten.ktoa_nr = kontenart.ktoa_nr
GROUP BY id_kst_dt
Nun bekomme ich die Fehlermeldung "Subquery returns more than 1 row". Ich habe natürlich meine Subquery auch getestet. Und ja richtig die liefert die Summe der Umsätze von jeder Kostenstelle. Und genau da liegt dann wohl mein Denkfehler.

Wie muß ich meine Subquery aufbauen, dass sie genau die Summe des Umsatzes liefert, die zur Summe des Kontos passt, damit der Planfaktor richtig berechnet werden kann.

Ich hoffe ich habe euch mit meinen Ausführungen nicht allzu sehr verwirrt. Vielleicht versteht ja jemand mein Problem und kann mir den entscheidenden Gedankenanstoß liefern.

Danke für eure Mühe und euer Interesse!

Schöne Grüße

Nach oben