Permalänk
Medlem

SQL Programmering

Hej, Jag har ett problem, får inte till SQL koden i följande fall, skulle vara väldigt glad om jag kunde få lite stöttning! Problemet är följande:
Om jag i SQL har en transaktionspost som innehåller ett ”från och med datum” och ett ”till och med datum”, posten vill jag dela upp en per dag så att man fördelar ut timmar och belopp.

Key1 Tim Apris Belopp Datum-from Datum- tom
1 168 200 33600 2017-09-01 2017-09-30

Vill att resultat ska bli enl följande:

Key1 Tim Apris Belopp Datum-from Datum- tom
1 5,6 200 1120 2017-09-01
1 5,6 200 1120 2017-09-02
1 5,6 200 1120 2017-09-03
1 5,6 200 1120 2017-09-04
1 5,6 200 1120 2017-09-06
1 5,6 200 1120 2017-09-07
1 5,6 200 1120 2017-09-08
1 5,6 200 1120 2017-09-09
1 5,6 200 1120 2017-09-10
1 5,6 200 1120 2017-09-11
1 5,6 200 1120 2017-09-12
1 5,6 200 1120 2017-09-13
1 5,6 200 1120 2017-09-14
1 5,6 200 1120 2017-09-15
1 5,6 200 1120 2017-09-16
1 5,6 200 1120 2017-09-17
1 5,6 200 1120 2017-09-18
1 5,6 200 1120 2017-09-19
1 5,6 200 1120 2017-09-20
1 5,6 200 1120 2017-09-21
1 5,6 200 1120 2017-09-22
1 5,6 200 1120 2017-09-23
1 5,6 200 1120 2017-09-24
1 5,6 200 1120 2017-09-25
1 5,6 200 1120 2017-09-26
1 5,6 200 1120 2017-09-27
1 5,6 200 1120 2017-09-28
1 5,6 200 1120 2017-09-29
1 5,6 200 1120 2017-09-30

Tack på förhand!

Permalänk
Medlem

Gör GROUP BY på fråndatum så grupperas det som du vill.

Visa signatur

ASUS ROG Strix X570-F, AMD Ryzen 9 5900X, ASUS GTX 1080 Ti Strix Gaming OC, 32GB G.Skill Trident Z Neo CL16 3600MHz, Arctic Freezer II 240, Seasonic Prime Titanium 850W, Phanteks Enthoo Evolv X, 2x Samsung 970 EVO Plus 1TB, Seagate Firecuda 2TB, Seagate Ironwolf 4TB, ASUS PG278Q

ASUS ROG Crosshair VI Hero, AMD Ryzen 9 3900X, ASUS RTX 2060 Dual OC, 16GB G.Skill Flare X CL14 3200 MHz @3200 MHz, Arctic Freezer 240, Seasonic Prime Titanium 850W, Phanteks Eclipse P400S Glass, Samsung 960 Pro 512GB, Samsung 850 Pro 512GB, Seagate Ironwolf 4TB, ASUS PG278Q

ASUS Maximus V GENE, Intel i7 3770K @ 4,6 GHz (1.190 V), EVGA GTX 670 FTW SLi, 8GB G.Skill TridentX CL10 2400 MHz, Samsung 850 Pro 512GB, Samsung 840 Pro 256GB, Corsair Hydro H100i, Corsair AX860i, Fractal Design Define R4W, ASUS PG278Q

Permalänk
Medlem

Du bör nog skapa en datum tabell att joina mot. Sök på tex "Creating a date dimension".
Timmar och belopp är bara dela med antal dagar i perioden DATEDIFF(DAY, Datum-from, Datum- tom).
Sen kan du behöva GROUP BY och SUM() om du har överlappande perioder.

Går även skriva FOR-loopar i SQL men inget jag skulle rekommendera..

Visa signatur

Intel i7 4970K, Fractal define mini, 24GB DDR3 1600mhz , 500GB SSD * 2 RAID0, GeForce 1060 6gb

Permalänk
Medlem

SQL Programmering

@KeyPakt:
Tack för snabbt svar, har testat men jag får det inte till att "rulla" ut en rad per dag.. är det något mera som ska till förutom Group by?

Permalänk
Medlem

Noterar snarlikheten i vad TS frågar efter här, att i SQL beräkna summor uppdelat per dag, men vad som frågas efter i en annan ny tråd, att i Excel beräkna summor uppdelat per månad. Båda skapade av nya medlemmar...

Har en kurs precis startat?

Permalänk
Medlem

@wikjan: Tror tyvärr inte han läste frågan riktigt, går inte göra det du vill med bara GROUP BY

Visa signatur

Intel i7 4970K, Fractal define mini, 24GB DDR3 1600mhz , 500GB SSD * 2 RAID0, GeForce 1060 6gb

Permalänk
Medlem

Hej,
precis som @railman skriver så är det enklast - tycker jag - att skapa en datumtabell som du sedan joinar mot.
Hoppas det hjälper dig på vägen.

--Skapa en datumtabell Create table Date ( Key1 int identity, [Date] date--, --[Month] int, --[Day] int ) ;with cte (id) as ( select 1 as id union all select id+1 from cte c where id <=100--Ställ in hur många rader du behöver ) --Fyller datumtabellen insert into Date (Date) select dateadd(d, -id, GETDATE()) from cte option (MAXRECURSION 100); --Ställ in hur många rader du behöver select d.Date, t.* from [your_table] t join Date d on d.Date between t.Date_from and t.Date_To

Permalänk
Medlem

Hur ser din fråga ut?

Visa signatur

Grubblare

Permalänk
Medlem

@drwlz:
Frågan lyder enl nedan:

Hej, Jag har ett problem, får inte till SQL koden i följande fall, skulle vara väldigt glad om jag kunde få lite stöttning! Problemet är följande:
Om jag i SQL har en transaktionspost som innehåller ett ”från och med datum” och ett ”till och med datum”, posten vill jag dela upp en per dag så att man fördelar ut timmar och belopp.

Key1 Tim Apris Belopp Datum-from Datum- tom
1 80 200 16000 2017-09-01 2017-09-10

Vill att resultat ska bli enl följande:

Key1 Tim Apris Belopp Datum-from Datum- tom
1 8,0 200 1600 2017-09-01
1 8,0 200 1600 2017-09-02
1 8,0 200 1600 2017-09-03
1 8,0 200 1600 2017-09-04
1 8,0 200 1600 2017-09-06
1 8,0 200 1600 2017-09-07
1 8,0 200 1600 2017-09-08
1 8,0 200 1600 2017-09-09
1 8,0 200 1600 2017-09-10

Permalänk
Medlem

@wikjan: Tror han ville se SQL-frågan, inte repetera första inlägget

Visa signatur

Intel i7 4970K, Fractal define mini, 24GB DDR3 1600mhz , 500GB SSD * 2 RAID0, GeForce 1060 6gb

Permalänk
Medlem

@wikjan: Som @railman skrev menar jag frågan du har skrivit i SQL som inte gör det du vill (kanske skulle ha skrivit "query" istället för fråga)

Visa signatur

Grubblare

Permalänk
Avstängd

@Wiinis: Datumtabell är ganska onödig när det finns DATEPART.

Permalänk
Medlem

@snajk: Hur får man ut alla datum mellan två med DATEPART?

Visa signatur

Intel i7 4970K, Fractal define mini, 24GB DDR3 1600mhz , 500GB SSD * 2 RAID0, GeForce 1060 6gb

Permalänk
Medlem
Skrivet av snajk:

@Wiinis: Datumtabell är ganska onödig när det finns DATEPART.

Det är sant man kan joina på tabellen igen. Mer dynamisk lösning 🙂

Permalänk
Medlem
Skrivet av railman:

@snajk: Hur får man ut alla datum mellan två med DATEPART?

DATEPART har jag dålig koll på, men Postgres kan fixa en range med generate_series.

Visa signatur

Kom-pa-TI-bilitet