PDA

View Full Version : Visa status


devotion
2005-10-04, 20:26
Hej!

Vet inte om detta är rätt forum.... Är det fel får ni flytta!

Ok, till frågan!

Jag har en tabell med en massa uppdrag... varje uppdrag har ett nummer och utförs av en montör. Om ett uppdrag utförs av mer än en montör skapas en klon av det ursprungliga uppdraget. Varje uppdrag har en status från 0 till 5 som betyder exempelvis; klart, pågående, fakturerat.

Detta betyder att ett uppdrag kan ha olika status beroende på om en montör är klar med sin del men en annan inte är det.

Fråga!

Kan man på något sätt ställa en SQL-fråga i kombination med lite asp-kod för att visa att uppdraget är klonat och har olika status?

tabellstruktur:

tblTask
-taskNr
-Status
-Task

Tack på förhand...!!

Mvh
Henrik

Peter S
2005-10-04, 20:33
Vad är det (datamässigt) som skiljer ett vanligt uppdrag från ett klonat? Kan du ge exempel på tabellinnehåll?

Lasp
2005-10-04, 20:34
Låt uppdragen vara för sig, skapa en relaterad post med montör(erna) sätt datum tid och stat :birp us på dessa.

devotion
2005-10-04, 20:38
Det skiljer ingenting när det klonas. Det blir en exakt kopia förutom "User" som är montören...

Mvh
Henrik

devotion
2005-10-04, 20:41
Hej!
Jag kan inte göra något åt tabellstrukturen, då jag bygger ett webgränssnitt till en färdig windowsapplikation. Annars håller jag med dig Lasp!

Mvh
Henrik

Peter S
2005-10-04, 21:30
Vad representerar "User" i din tabellstruktur?tblTask
-taskNr
-Status
-TaskKan du ge exempel på tabellinnehåll?

devotion
2005-10-04, 21:45
tblTask
-taskNr (text)
-Status (numeriskt 0-5)
-Task (Uppdrag)
-User (Montör)


Det skiljer inget datamässigt på ett klonat uppdrag.

emission
2005-10-04, 21:51
om du söker ut


SELECT taskNr,MIN(Status) as MinStatus,MAX(Status) as MaxStatus,COUNT(*) as UserCount, Task FROM tblTask GROUP BY taskNr,Task


Så kan du kolla om MinStatus skiljer sig från MaxStatus (dvs. olika status), samt hur många montörer som är delaktiga.

devotion
2005-10-04, 22:00
Hej!
ok...

Kan jag lägga in den i en underfråga?

Min fråga ser ut så här nu:

strSQL = "SELECT tblTask.TaskNr, tblTask.customerName, tblTask.task, iif (SUM(Time) IS NULL, 0, SUM(Time)) As totalTime, " &_
"(SELECT iif (SUM(Time) IS NULL, 0, SUM(Time)) FROM tblTime where taskNr = '" & strTaskNr & "' and spec in " &_
"('Arbetstid', 'Arbetstid B')) as workingTime " &_
"FROM tblTask " &_
"INNER JOIN tblTime ON tblTask.Id = tblTime.TaskId " &_
"WHERE " & strWhere & " " &_
"GROUP BY tblTask.TaskNr, tblTask.customerName, tblTask.task"


Den underfrågan som är med nu fungerar inte heller så bra... den tar med alla timmarna i tblTime. Dvs struntar i Wheredelen... Vad är det för fel...???

Och som sagt denna fråga kanske skalll vara i sql-forumet... sorry....

Mvh
Henrik

emission
2005-10-04, 22:33
Är lite osäker på vad Access klarar i iif-satsen (kanske måste du skriva om "in"-delen som en "or"), men i princip borde det vara något sånt här:


"SELECT tblTask.TaskNr, tblTask.customerName, tblTask.task, " & _
"MIN(Status) as MinStatus,MAX(Status) as MaxStatus,COUNT(*) as UserCount, " & _
"SUM(Time) As totalTime, SUM(iif(spec in ('Arbetstid', 'Arbetstid B'),Time,0)) as workingTime " & _
"FROM tblTask " & _
"LEFT JOIN tblTime ON tblTask.Id = tblTime.TaskId " & _
"WHERE " & strWhere & "GROUP BY tblTask.TaskNr, tblTask.customerName, tblTask.task"

devotion
2005-10-04, 22:37
:birp
Jodå, "in" fungerar i access också!

Det är ju fantastiskt! Det funkar kanon!!

Thanx emission!

Mvh
Henrik

devotion
2005-10-04, 22:40
Så kan du kolla om MinStatus skiljer sig från MaxStatus (dvs. olika status), samt hur många montörer som är delaktiga.

hmm... hur hade du tänkt dig detta?

Menar du att jämföra med nån if-sats eller nått?

Mvh
Henrik

devotion
2005-10-04, 22:43
Weee!

Tror jag fattar...

Det blir ju kanon....

Tack!

Mvh
Henrik

emission
2005-10-04, 22:49
Om du vill så kan du göra en iif direkt i SQL:en för att jämföra statusarna, men jag tänkte att det kunde vara okej att få ut MinStatus och MaxStatus. Det finns inget som hindrar att du gör både och.

devotion
2005-10-04, 22:52
min och maxstatus funkar perfekt, men usercount returnerar ju "alla" montörerna kan man inte göra så att endast unika räknas.

dvs om pelle finns med 4 gånger och kalle 1 gång skall den räkna till "två"

och kan man inte få med alla olika statusar nu får man ju bara med att det har olika status. Det funkar ju fint om det bara är två, men säg att det är tre...

Tänkte det vore käckt att koppla siffrorna till ikoner!

mvh
Henrik

emission
2005-10-05, 00:46
min och maxstatus funkar perfekt, men usercount returnerar ju "alla" montörerna kan man inte göra så att endast unika räknas.

Det glömde jag. COUNT(DISTINCT User)


och kan man inte få med alla olika statusar nu får man ju bara med att det har olika status. Det funkar ju fint om det bara är två, men säg att det är tre...

Nej, för då blir det en helt annan sökning som måste returnera en rad per status/task, och då missar vi finessen med den grupperade sökningen.

devotion
2005-10-05, 08:57
:(
testade det men får följande felmeddelande:


Microsoft OLE DB Provider for ODBC Drivers (0x80040E14)
[Microsoft][Drivrutin för ODBC Microsoft Access] Syntaxfel (operator saknas) i frågeuttrycket 'count(distinct User)'.


user finns i tblTime

mvh
Henrik

devotion
2005-10-05, 17:49
:(
Hej!

Nu ser koden ut så här med hjälp från emission och lite annan hjälp...


"SELECT tblTask.TaskNr, tblTask.customerName, tblTask.task, " & _
"MIN(Status) as MinStatus, MAX(Status) as MaxStatus, (select count ( * ) " &_
"FROM (select distinct tblTime.user from tblTask INNER JOIN tblTime ON tblTask.Id = tblTime.TaskId where taskNr = '" & strTaskNr & "')) as userCount, " & _
"SUM(iif(spec in ('Arbetstid', 'Arbetstid B', 'Övertid', 'övertid B'),Time,0)) as totalTime, " & _
"SUM(iif(spec in ('Arbetstid', 'Arbetstid B'),Time,0)) as workingTime, " & _
"SUM(iif(spec in ('Övertid', 'Övertid B'),Time,0)) as overTime, " & _
"SUM(iif(Price,Price,0)) as totalPrice " & _
"FROM tblTask " & _
"LEFT JOIN tblTime ON tblTask.Id = tblTime.TaskId " & _
"WHERE " & strWhere & "GROUP BY tblTask.TaskNr, tblTask.customerName, tblTask.task"


Det funkar hyffsat, på så sätt att det inte kommer några felmeddelanden och sånt... Men det räknas fel..

Summeringsfunktionen "totalTime" räknar fel när det finns olika specifikationer i kolumnen "spec"
När det endast finns med 'Arbetstid' funkar det finfint, men när det är både 'Arbetstid' och 'Arbetstid B' tas inte 'Arbetstid B' med... mycket märkligt... Det kanske är svårt att ge några förslag på vad som kan göras när ni inte ser resultatet av satsen.. Men ni får gärna försöka...

Please!

Mvh
Henrik