23. februar 2008 - 18:10Der er
23 kommentarer og 2 løsninger
Hjælp til sql sætning
jeg har en side med en tilhørende mssql database - en slags vagtdatabase. Jeg skal lave en udskriftsside hvor der hentes data fra databasen og det volder problemer. Der er felterne datofra og datotil - tid - besætning og tekst. Mit problem er at vagten går fra kl. 0500 og køre 24 timer - altså fra f.eks d. 22 til den 23 - døgnskift. jeg bruger 2 formularer til at opdatere data i databasen - en til vagtoprettelse - der indeholder datofra og til tid og besætning. En anden formular der indeholder datofra og til og tekst. Både vagtoprettelse og tekstoprettelse bliver opdateret i samme tabel T_Dok. Jeg skal danne et udskrift hvor data fra vagtoprettelsen kun optræder en gang indenfor de 24 timer og så skal jeg ha alle teksterne indenfor de 24 timer med også??
Terry - jeg bruger ASP - de 2 datofelter er datofelter - resten er tekst. jeg forventer øverst på udskriften at se vagtoprettelsen for den aktuelle dag og derefter alle de tekster der der er gældende indenfor de 24 timer vagten varer - altså fra f.eks den 220208 kl. 0500 til den 230208 kl. 0500. Egentlig kan det måske gøres ved at lave 2 sqlsætninger - den ene der henter vagten og en der henter teksterne??
Well if all of the data is in one table then you migh t as well just use one SQL select to get all of the records. Then take the information which is for the "vagt" from the first record and then all of the "tekster" starting from the first record and up to the last.
How do you distinguish (how can you see) the difference between the last record from a "vagt" (230208 kl. 0500) and the first record of the next "vagt" which will (might) have the smae dat/time (230208 kl. 0500). One "vagt" ends when the next "vagt" starts!
Maybe you should consider normalizing your table(s) also. The way I see it you should have at least three tables. One for the "Vagt info", another for the "tekster" and maybe also one for "besætning" which would actually have its own tabel with a link table between that and the "vagt" table (many-to-many), So there's four tables.
Der er ikke noget felt der hedder vagt - kun besætning. Den eneste måde at se forskel er TID - alle vagter slutter 0459. En vagtoprettelse vil består af f.eks: datofra og datotil og besætning. En tekst vil består af: datofra og datotil og tid og tekst.
så for at fange det jeg vil ha førsst på siden skal altså være noget med
SELECT * FROM T_Dok WHERE datofra = date(date kommer fra formularen) and datotil = date1(anden formularfelt)AND besætning is not null.
Det skulle gi mig vagtoprettelsen den pågældende dag. Nu skal jeg så ha alle teksterne for den dag også altså
SELECT * FROM T_Dok WHERE (datofra = date(date kommer fra formularen)AND tid > 0500) (AND datotil = date1(anden formularfelt)AND tid < 0500) and besætning is null.
Men hvordan for jeg dem lagt sammen til en sætning eller en anden løsning som du siger med flere tabeller måske
"de 2 datofelter er datofelter - resten er tekst." Are the times also text? If so then your not making things easy for yourself, why dont you havethe date and time in the same dateTime field?
Hvis jeg laver 2 tabeller f.eks T_Dok og T_besætning - skal jeg jo alligevel ha 2 sqlsætninger på samme side for at få lavet en vagtrapport som det hele handler om. Altså med selve vagtoprettelsen(besætningen)som første record på siden og derefter alle teksterne i tidsrækkefølge
If you have two tables then as long as there is a relationship between the two tables you can use one SQL to select data from both tables at the same time.
T_Dok indeholder datofra(ddmmyy), datotil(ddmmyy), tid(varchar(4)), tekst(varchar), besætning(varchar). Kunne relationen i 2 tabeller være på datofra så jeg har tabel T_Dok der indeholder felterne datofra, datotil, tid, tekst og tabellen T_besætning der indeholder datofra og besætning. Der kan man måske lave et INNERJOIN på datofra?
This is the way I see it. Having a table for teames (T_Team) ensures that you always use the same name (spelling) for a team. A Vagt (T_Vagt) is for a period (FraDatoTid TilDatoTid) and a team covers the Vagt period. For each Vagt period a number of text records (T_Dok) get written.
With these tables/fields relationships I can find all T_Dok records for a specific Vagt (T_Vagt) and we can see which Team (besætning) was responsible for the Vagt.
SELECT dbo.t_vagt.Beseatning, CAST(FLOOR(CAST(dbo.t_vagt.DatoTidFra AS FLOAT)) AS DATETIME) AS VagtDato, dbo.t_vagt.DatoTidTil, dbo.t_dok.DatoTid, dbo.t_dok.Tekst FROM dbo.t_vagt INNER JOIN dbo.t_dok ON dbo.t_vagt.VagtID = dbo.t_dok.VagtID WHERE CAST(FLOOR(CAST(dbo.t_vagt.DatoTidFra AS FLOAT)) AS DATETIME) = '2008-02-14'
sSQL = "SELECT dbo.t_vagt.Beseatning, CAST(FLOOR(CAST(dbo.t_vagt.DatoTidFra AS FLOAT)) AS DATETIME) AS VagtDato, dbo.t_vagt.DatoTidTil, dbo.t_dok.DatoTid, dbo.t_dok.Tekst FROM dbo.t_vagt INNER JOIN dbo.t_dok ON dbo.t_vagt.VagtID = dbo.t_dok.VagtID WHERE CAST(FLOOR(CAST(dbo.t_vagt.DatoTidFra AS FLOAT)) AS DATETIME) = " & SomeDateFromYourASPGoesHere
NOTE: I dont know much about ASP but you need to replace SomeDateFromYourASPGoesHere with a variable from your ASP which contains the date of the "Vagt" you want in your report.
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.