tim1986
Goto Top

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

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

Content-Key: 105087

Url: https://administrator.de/contentid/105087

Printed on: April 24, 2024 at 06:04 o'clock

Member: Biber
Biber Jan 03, 2009 at 15:33:32 (UTC)
Goto Top
Moin tim1986,

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
Member: tim1986
tim1986 Jan 03, 2009 at 20:18:20 (UTC)
Goto Top
moin Biber,
also

1,2.) ist bereits vorhanden und sind auch schon daten drin bzw können auch zwischendurch daten dazu kommen...

3.) mit der id bin ich mir nicht ganz sicher für mich hat sie keinen ersichtliche bedeutung allerdings kann es sein das das externe tool darauf zurückgreift wozu auch immer... sie wird lso immer nur vortlaufend ergänzt

3.1) ja genau, die Gruppe dient nur der zuordnung einer auswertungs gruppe, sollte also variable sein.

mfg

Tim
Member: Biber
Biber Jan 04, 2009 at 00:30:37 (UTC)
Goto Top
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.
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
Member: tim1986
tim1986 Jan 04, 2009 at 01:10:56 (UTC)
Goto Top
Super funktioniert wunderbar vielen dank für die schnelle hilfe