24. februar 2005 - 08:13Der er
60 kommentarer og 1 løsning
inner join
jeg har en sql, der ser sådan her ud
SELECT xx FROM [singlesystem] INNER JOIN [testing] INNER JOIN [idle] ON [testing].[test platform] = [singlesystem].[name] ON [testing].[test platform] = [idle].[testsystem] ORDER BY [singlesystem].[location] ASC, [testing].[test platform] ASC
noget af det har virket, men linjen ON [testing].[test platform] = [idle].[testsystem] virker ikke.. jeg kan lige prøve at forklare, hvordan outputtet skal være.
jeg skal have selected hvor [testing].[test platform] = [idle].[testsystem] = [singlesystem].[name] Der skal sorteres efter [testing].[test platform] og [idle].[testsystem] på samme tid, så alle records med ens [test platform]/[testsystem] kommer på en gang.. desuden skal jeg kunne lave WHERE for den enkelte tabel, som ikke bevirket den recordrangen i den anden tabel..
Looking at your previous question I have added the idle table to the SQL
SELECT singlesystem.*, testing.*, idle.*, singlesystem.location, testing.[test platform] FROM (testing INNER JOIN singlesystem ON testing.[test platform] = singlesystem.name) INNER JOIN idle ON testing.[test platform] = idle.testSystem ORDER BY singlesystem.location, testing.[test platform];
Synes godt om
Slettet bruger
24. februar 2005 - 08:52#7
hvis jeg skal bruge access skal jeg til at oprette relationer imellem tabellerne, fordi jeg bruger forskellige navne, og jeg er ikke lige inde i access visuelt, og det ser ud som om, jeg skal bruge lang tid på at finde ud af det.. men jeg kan prøve at vise realationerne her..
tbl1.system tbl2.system tbl3.system
jeg skal have alle records, hvor: tbl3.system = tbl2.system og tbl3.system = tbl1.system
altså skal outputtet være tbl1 og tbl2.. de har begge kolonnen system, og denne skal der soteres efter.
Synes godt om
Slettet bruger
24. februar 2005 - 08:58#8
hvordan bliver data behandlet i dit svar? bliver recordsne fra de 2 tabeller lagt sammen, eller får de forskellige record? tabellerne skal ikke lægges sammen, men hver record skal have sin egen row.. Når jeg udskriver skal recordsne komme i denne rækkefølge (eksempel), hvor der er sorteres [system] ASC
If you comapct the database then it will not fill so much. Then you can zip it!
Try giving an example of your tables and data, and also what you want to see in the result
Synes godt om
Slettet bruger
24. februar 2005 - 09:11#13
[singlesystem] name varchar (255) location varchar (255)
[testing] test platform varchar (255)
[idle] testsystem varchar (255)
mere er vist ikke nødvendigt for at lave forespørgslen.. og det altså (name = test platform), (name = testsystem)..
Synes godt om
Slettet bruger
24. februar 2005 - 09:15#14
hvad sker der egentlig når man komprimerer databasen?? rydder den op eller omorganiserer den data, så søgning er langsommere - eller hurtigere?? nu fylder databasen i hvert fald kun 1,07 MB :P..
Synes godt om
Slettet bruger
24. februar 2005 - 09:16#15
sender den om 2 sek, hvis du stadig vil have den..
try showing the some data for each table and also what you expect to see in the result
I think it is a UNION join your after!
SELECT [name] as fld1 FROM singlesystem UNION ALL SELECT [test platform] as fld1 FROM testing UNION ALL SELECT [testsystem] as fld1 FROM idle ORDER By fld1
SELECT fld1, fld2 FROM Tbl2
Synes godt om
Slettet bruger
24. februar 2005 - 09:18#17
hmm.. det tager lige lidt længere tid, end jeg havde regnet med.. når man komprimerer sletter den også tabeller, der er tomme, og jeg har det liggende på en anden computer.. men det kommer om lidt :P..
If you can put some data (fictive) in the tables then it would help
Synes godt om
Slettet bruger
24. februar 2005 - 09:42#26
jeg kan ikke sende en zippet version af databasen, fordi hotmail mener, den indeholder virus.. hvis jeg prøver at uploade databasen, mener hotmail ikke, der er virus.. jeg ved ikke, om du vil have, jeg skal sende den??
Synes godt om
Slettet bruger
24. februar 2005 - 09:43#27
jeg sidder på en computer, der er styret af en administration, så jeg ved ikke, hvad der kan være på den, og hvor sikret den er, så jeg vil ikke sende noget til dig, hvis du kan få virus af det..
You gave an example previoulsy tbl1.system (system = "a") tbl2.system (system = "a") tbl1.system (system = "b") tbl1.system (system = "c") tbl2.system (system = "c")
but this only uses ONE field from each table and if you want to see other fields then you have a problem because the tables do NOT have the same number of fields.
So I need to know which fields from which tables you want to see and HOW you want to see the data!
Synes godt om
Slettet bruger
24. februar 2005 - 10:20#35
jeg er kommet til at sige noget vrøvl, fordi det hele kunne laves meget nemmere.. det behøver kun at fungere som 1 tabel.. recordsettet skal være bygget op om testing, som det var i den sql, du lavede til mig i et tidligere spm.. der skal bare smides idle på, hvor idle.systemname = singlesystem.name..
Synes godt om
Slettet bruger
24. februar 2005 - 10:21#36
hvis du laver selecten, kan jeg godt definere, hvilke felter, der skal tages med..
Synes godt om
Slettet bruger
24. februar 2005 - 10:24#37
eller det jeg egentlig gerne vil have er en sum af alle hours-værdier i idle, der er i et bestemt dato-interval, og de skal lægges ind i recordsne, hvor idle.testsystem = singlesystem.name..
but this is my problem! I MUST know EXACTLY what you expect in the result before I can put an SQL together. There are SO MANY ways that data can be selected from three tables!
There is NO date/time values in the idle table. And it isnt possible in a simple SQL to add the hours:minutes:seconds A date/time field can contain dates and times. Summing fields containing times will result in values which are NOT valid time fields example ADD 13:00:00 to 12:59:00 25:59:00 which is NOT a valid time!
You will need to make some code which loops through the records and adds them up for you! But it can NOT return a date/time field! A date field which is used for storing time values can only contain
23:59:59 after that it starts from 00:00:00 again.
It would be an idea to convert them to seconds, add them all up and then start calculating how amny hours minutes seconds theer are.
Synes godt om
Slettet bruger
24. februar 2005 - 10:55#46
hours er integer..
jeg skal have summen af idle.hours i intervallen idle.date < x AND idle.date > y
Synes godt om
Slettet bruger
24. februar 2005 - 10:58#47
Jeg kan vel gøre det på denne måde:
SELECT sum_funktion(idle.hours) FROM (testing INNER JOIN singlesystem ON testing.[Test platform] = singlesystem.name) INNER JOIN idle ON singlesystem.name = idle.testsystem WHERE idle.date < x AND idle.date > y;
Synes godt om
Slettet bruger
24. februar 2005 - 11:01#48
hmm.. hedder sumfunktionen bare SUM()?? eller tæller den antal records??
SELECT testing.[Test platform], Sum(idle.hours) AS SumOfhours, idle.date FROM (testing INNER JOIN singlesystem ON testing.[Test platform] = singlesystem.name) INNER JOIN idle ON singlesystem.name = idle.testsystem GROUP BY testing.[Test platform];
GROUP BY will give you sum of hours for each GROUP in this example testing.[Test platform]
In this example you could also have used idle.testsystem but that will NOt always be the case. If you choose other fields then the result may not be as you want.
I am sure that if you tried using Access query builder you will find it VERY helpefull!
Synes godt om
Slettet bruger
24. februar 2005 - 12:21#54
jeg kan ikke få dette til at virke:
SELECT testing.[Test platform], Sum(idle.hours) AS SumOfhours, idle.date FROM (testing INNER JOIN singlesystem ON testing.[Test platform] = singlesystem.name) INNER JOIN idle ON singlesystem.name = idle.testsystem GROUP BY testing.[Test platform];
"You tried to execute a query tha does not include the specified expression 'date' as a part of an aggregate function."
Betyder det, at jeg skal få alle de felter, jeg vil udskrive, med i min GROUP BY (hvilket vil gøre, at sum(idle.hours) ikke bliver som jeg vil have det??)
Og hvad gør man for at komme ind i access query builder (jeg har en dansk udgave, så jeg ved ikke, hvad jeg kommer ind i - det vil hjælpe lidt, hvis jeg har den engelske forklaring på, hvordan jeg kommer derind)
when you open Access (double click the .mdb file) you should see the database window with a menu down the left side. Here you can choose tables, queries, modules ....
Choose queries. Then press New at the top of the database window. Then choose "Deign view" (the first in list). Then choose the tables you want. Then its just a case of seelcting the fields you want in the query.
når jeg vil have alle med (*) skriver den, jeg ikke kan, fordi jeg ikke kan regne med totaler for hele tabellen.. hvordan får jeg summen af idle.hours for hvert name i singlesystem og samtidigt henter alle data fra testing?? det må da være muligt..
I think you are going to have to get hold of a book on SQL. It will take FAR TOO LONG to teach you here :o)
Synes godt om
Slettet bruger
24. februar 2005 - 16:15#60
Tak for hjælpen, terry.. jeg fik lavet noget af det med access query-manager, eller hvad det nu hedder. jeg stødte ind i nogle problemer, da jeg skulle selecte hours-rangen, men det løste jeg med en Sub-forespørgsel:
SELECT (SELECT Sum(hours) FROM idle WHERE date >= #" & from_date & "# AND date <= #" & to_date & "# AND testsystem = singlesystem.name) AS SumOfhours, singlesystem.location, testing.[Time spend], singlesystem.hours, testing.[Done by], testing.Status, testing.[Test platform], testing.ID FROM singlesystem LEFT JOIN testing ON singlesystem.name = testing.[Test platform] WHERE [testing].[Done by] >= #" & from_date & "# AND [testing].[Done by] <= #" & to_date & "# AND testing.Status = 'DONE' ORDER BY singlesystem.location, singlesystem.name, testing.ID;
I think you will find itvery helpfull using the query builder :o)
and thanks a bunch for the points!
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.