#1 Det er ikke en optimal måde - men sådan var rådata desværre :(
man kan også lave noget datepart(dw,dato) i kalender tabellen..
jeg ønsker en tabel hvor hvis fx. ID 24 har 1 i mandag og 1 i tirsdag - så er der en linje i tabellen for hver mandag og tirsdag i forhold til de datoer der er i kalender (de indeholder et halvt år)
jeg kan lave det lidt a la , men den skal jeg så lave syv gange.. og ændre det i fed hver gang..
Insert into ResultatTabel
Select samlet.dato ,Samlet.ID ,Samlet.Antal From
(Select ID ,sum(AntalMandag) as Antal from Levering where levering.sum(AntalMandag) >0 group by ID
Cross Join (select dato from Kalender where ugedag=2)
tror du misforstår mig/ jeg forklarer mig uklart.. det er ikke et spørgsmål om at køre fra en dato til en dag (som tekst)..
det klarer datepart(dw, enDato) fint.
jeg kan også kode det i VBA i excel, men der kommer der en begrænsning med antallet af celler.. og ideen at det skulle laves i (T)SQL (på en SQL server 2005)
det er et spørgsmål om hvordan man laver et cross join med et sæt dynamiske kriterier, så hvis der er >0 i en "kolonne" der viser antal om mandagen, så skal det antal gå igen alle mandage indenfor de datoer der er i "kalender" tabellen.
Lidt overvejelser: du behøver ikke at have en tabel med datoer og ugedag.
For at indsætte records i Resultat-tabel kunne du lave et loop lidt som det her:
startdato = i dag slutdato = om 6 måneder loop så længe dato er før slutdato find ugedag for dato find de kunder, der har en levering på den ugedag sæt dato, kunden og leveringen ind i Resultat næste dato end loop
The following is done in Access SQL but its straightforward SQL so it should work in SQL Servere too.
Theres an inner SQL which is just getting kunde data structured correctly by using a UNION JOIN, then its just a case of joining the kalender table on to the derived table and sorting/filtering to give desired result.
SELECT kalender.Dato, Kunde.ID, Kunde.Antal FROM kalender INNER JOIN (SELECT ID, UgeDag, Antal FROM (SELECT ID, 2 as UgeDag, Mandag as Antal FROM kunde UNION SELECT ID, 3 as UgeDag, Tirsdag as Antal FROM kunde UNION SELECT ID, 4 as UgeDag, Onsdag as Antal FROM kunde) ) as Kunde ON kalender.ugedag = Kunde.UgeDag WHERE (((Kunde.Antal)>0)) ORDER BY kalender.Dato, Kunde.ID;
Synes godt om
Ny brugerNybegynder
Din løsning...
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.