20 Datensätze als Toplist in 2te tabele anfügen
Hallo und frohes neues erstmal...
ich versuche Umsatzdaten in eine 2te Tabelle (für ein externes Tool) zu kopieren hier bei sollen nur die Datensätze mit dem summierten umsätzen (in form einer Top liste) selectiert werden.
im endeffekt soll es dann so aussehen
id | adressnummer | jahr | budget | Gruppe
-1-----0815---------2009----15000---TOP20
-1-----0816---------2009----15000---TOP20
usw.
hier erstma der code den ich bis jetzt habe
Ich hoffe mir kann jemand helfen! Hab warscheinlich riesen Fehler mit den Variablen gemacht aber mit dehnen Arbeite ich heute auch zum ersten mal^^
ach ja sorry hab ich vergessen zu sagen ich nutze MS SQLEXPRESS 2005
ich versuche Umsatzdaten in eine 2te Tabelle (für ein externes Tool) zu kopieren hier bei sollen nur die Datensätze mit dem summierten umsätzen (in form einer Top liste) selectiert werden.
im endeffekt soll es dann so aussehen
id | adressnummer | jahr | budget | Gruppe
-1-----0815---------2009----15000---TOP20
-1-----0816---------2009----15000---TOP20
usw.
hier erstma der code den ich bis jetzt habe
declare @jahr varchar (4)
declare @umsatz float
declare @adressnummer float
select TOP (20) datepart (year,b.datum)as @jahr, sum (euronetto) as @umsatz , b.adressnummer as @adressnummer
from beleg as b
where belegtyp = 'R' and :Datum = datepart (year,b.datum)
group by b.datum , b.adressnummer
update SLWL_BudgetJahr set Jahr = @Jahr, budget= @umsatz, adressnummer= @adressnummer
Ich hoffe mir kann jemand helfen! Hab warscheinlich riesen Fehler mit den Variablen gemacht aber mit dehnen Arbeite ich heute auch zum ersten mal^^
ach ja sorry hab ich vergessen zu sagen ich nutze MS SQLEXPRESS 2005
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 105087
Url: https://administrator.de/forum/20-datensaetze-als-toplist-in-2te-tabele-anfuegen-105087.html
Ausgedruckt am: 27.12.2024 um 19:12 Uhr
4 Kommentare
Neuester Kommentar
Moin tim1986,
da hätte ich aber ein paar Rückfragen zu Deinem Plan, bevor ich da hilfreiche Tipps poste...
Deine Zieltabelle "SLWL-BudgetJahr"...
Grüße
Biber
da hätte ich aber ein paar Rückfragen zu Deinem Plan, bevor ich da hilfreiche Tipps poste...
Deine Zieltabelle "SLWL-BudgetJahr"...
- ist bereits vorhanden/nicht vorhanden?
- oder hat gar schon bestehende Datensätze?? Oder WTF willst Du dort UPDATEn?
- wofür die "ID" in dieser Tabelle?!? Und welchen informativen Nährwert hat der Wert "TOP20" im Feld "Gruppe" ? Baggerst Du auch noch in die gleiche Tabelle andere Datensätze wie "TOP44" oder "FLOPS2000"??
Grüße
Biber
Moin tim1986,
nun denn... ich hoffe, dass zumindest diese Kann-sein-dass-ich-die-irgendwann-mal-brauche-ID einen automatisch generierten Wert zugewiesen bekommt (also IDENTITY-Charakter hat in Deiner Struktur.
Bewusst ignorieren will ich mal die bei Dir angedeutete Konvertierung des "Jahr"-Wertes in einen VarChar - das verweisen wir mal in den Bereich der Tippfehler bzw. Fabeln.
Was dann bleibt ist ein stinknormales INSERT INTO-Statement.
Mit einem SELECT INTO-Statement würdest Du die Zieltabelle neu und nur mit den SELECTierten Datensätzen anlegen - dies hätte ich eigentlich erwartet.
Ungetestet, daher könnte es sein, dass das Literal 'TOP 20', also der feste Text, der in das Feld "Gruppe" eingefügt werden soll, einen SQL-Error verursacht, weil er so nicht mit einer Aggregatfunktion erzeugt werden kann.
Aber so wäre erst mal der erste Versuch.
Sollte es einen Fehler geben: bitte dann das Statement OHNE die erste Zeile abfeuern und sehen was passiert.
Grüße
Biber
nun denn... ich hoffe, dass zumindest diese Kann-sein-dass-ich-die-irgendwann-mal-brauche-ID einen automatisch generierten Wert zugewiesen bekommt (also IDENTITY-Charakter hat in Deiner Struktur.
Bewusst ignorieren will ich mal die bei Dir angedeutete Konvertierung des "Jahr"-Wertes in einen VarChar - das verweisen wir mal in den Bereich der Tippfehler bzw. Fabeln.
Was dann bleibt ist ein stinknormales INSERT INTO-Statement.
Mit einem SELECT INTO-Statement würdest Du die Zieltabelle neu und nur mit den SELECTierten Datensätzen anlegen - dies hätte ich eigentlich erwartet.
INSERT INTO SLWL_BudgetJahr ( jahr, budget, adressnummer, gruppe)
select TOP 20 datepart( year, b.datum),
sum (euronetto),
b.adressnummer,
Max('TOP 20')
FROM beleg as b
where b.belegtyp = 'R' and 2009 = datepart (year, b.datum)
group by datepart( year, b.datum),
b.adressnummer
ORDER BY 2 DESC
Ungetestet, daher könnte es sein, dass das Literal 'TOP 20', also der feste Text, der in das Feld "Gruppe" eingefügt werden soll, einen SQL-Error verursacht, weil er so nicht mit einer Aggregatfunktion erzeugt werden kann.
Aber so wäre erst mal der erste Versuch.
Sollte es einen Fehler geben: bitte dann das Statement OHNE die erste Zeile abfeuern und sehen was passiert.
Grüße
Biber