webForumDet fria alternativet

Skapa ett antal poster enkelt

Databaser & SQL

4 svar · 465 visningar · startad av Lasp

Medlem sedan juli 200012 978 inlägg
Frågan#1

Jag vill periodisera kostnader för exempelvis billeasing för ett antal bilar.
Om jag då vill skapa exempelvis 12 månadsposter om 4444:- plus moms för varje RegNr.
Hur skriver jag en SQL sats i MsSQL för att det skall gå snabbt och enkelt!

Resultatet skulle då kunna bli: :h

ObjCost
CostID Reg_No CostDat Measure Cost Vat Sign NotDate Total
1 AAA111 2008-07-25 Leasingavgift 4 444,00 kr 1 111,00 kr LASP 2008-10-18 5 555,00 kr
2 AAA111 2008-08-25 Leasingavgift 4 444,00 kr 1 111,00 kr LASP 2008-10-18 5 555,00 kr
3 AAA111 2008-09-25 Leasingavgift 4 444,00 kr 1 111,00 kr LASP 2008-10-18 5 555,00 kr
4 AAA111 2008-10-25 Leasingavgift 4 444,00 kr 1 111,00 kr LASP 2008-10-18 5 555,00 kr
5 AAA111 2008-11-25 Leasingavgift 4 444,00 kr 1 111,00 kr LASP 2008-10-18 5 555,00 kr
6 AAA111 2008-12-25 Leasingavgift 4 444,00 kr 1 111,00 kr LASP 2008-10-18 5 555,00 kr

Sedan vill jag skriva in ett nytt RegNr och kanske ändra på beloppet så dunka in 6 eller 12 poster igen! :r Kan det låta sig göras undrar Lasp :OO

ObjCost.bmp
Medlem sedan apr. 2006409 inlägg
#2

Du snabbar på databasen om du undviker resudansen du har nu, om det är din tabellstruktur du visar.

ObjCost
id | post_id | kanske_fler_kolumner_vad_vet_jag

post_id
CostID | Reg_No | CostDat | Measure | Cost | Vat | Sign | NotDate | Total

Edit, nu såg jag att tiden hamnade i det jag kallar post_id, lägg det i ObjCost i stället.

Medlem sedan juli 200012 978 inlägg
#3

Detta är ett utdrag av vad man skall se.
Jag vet att en normalisering skulle kunna vara effektivare.
Men jag är bra på denormalisering. Dvs. alla data för att ta ut snabba rapporter.
Så tabellstrukturen kan fungera.

Medlem sedan dec. 20025 483 inlägg
#4

En stored procedure kanske?

create procedure sprocCarLease
(
  @numberOfInserts int,
  @beginDate datetime,
  @licensePlateNumber char(6),
  @cost float
)
as
begin
  declare @count int
  declare @currentDate datetime
  declate @vat float
  set @count = @numberOfInserts
  set @currentDate = @beginDate
  set @vat = @cost * 0.25
  while @count > 0
  begin
    insert into
      objcost
    (
      reg_no,
      costdat,
      measure,
      cost,
      vat,
      sign,
      notdate,
      total
    )
    values
    (
      @licensePlateNumber,
      @currentDate,
      'Leasingavgift',
      @cost,
      @vat,
      'LASP',
      getdate(),
      @cost + @vat
    )
    set @currentDate = dateadd(month, 1, @currentDate)
    set @count = @count - 1
  end
end
execute sprocCarLease 12, '2008-01-25', 'AAA111', 4444.00

Otestad dock...

Medlem sedan juli 200012 978 inlägg
#5

Japp så var det löst. Tack

FyFan va häftigt. :moose
Hade det inte varit för det missade "r"ét i den sista declare hade jag trott att Peter S varit Gud, eller hans högra hand! §e
Jag bugar och bockar. Synd att det är så långt till en gemensam Öl säger Lasp :birp :birp :birp Må de anlända till strupen vid tillfälle. :bire

268 ms totalt · 4 externa anrop · v20260731065814-full.a51de22e
121 ms — deklarationer (db)
0 ms — hämta statistik (cache)
139 ms — hämta tråd, inlägg och bilagor (db)
126 ms — ändringar (db)