JonMedlem sedan juli 20011 304 inlägg Pular med ett ärendehanteringssystem. Har lite problem att visa ärendena som jag vill. Datamodellen lite strippad och förenklad ser ut enligt följande: (inte så snyggt men ni kanske ser hur jag menar)
* = Primärnyckel
# = Främmande nyckel
|Task----------| |Priority--------| |Customer-------| |Employee----|
|----------------| |------------| |---------------| |----------------|
|*TaskId------| |*PriorityId---| |*CustomerId---| |*EmployId---|
|#PriorityId---| |PriorityName| |CustomerName| |EmployName|
|#CustomerId|
|#EmployId---|
|TaskRegdate|
|TaskDeadline|
|TaskText------|
Det som är problemet är SQL-satsen. Tänkte göra en Stored Proc för att visa alla ärenden. Problemet är att jag vill sortera dem på prioritet men ändå få samma kunder under varandra. I andra hand vill jag sortera på registreringsdatum.
Det skulle resultera i något sånt här: (inte så snyggt men ni kanske ser hur jag menar igen)
Prio Kund Regdatum Tekniker Att göra
---------------------------------------------------------------------------
Hög Kalle Kula 2003-05-04 Bosse Bula Laga saker
Mellan Kalle Kula 2003-06-01 Lisa Lus Fixa Saker
Låg Kalle Kula **** ***** ******
Hög Lena Lila ***** ****** ******
Låg Lena Lila **** ****** ******
Mellan Fia Krok **** ***** ******
Problemet är som sagt att få det per Kund.
SQL hittils något i stil med:
SELECT * From Task, Priority, Kund, Customer, Employee
WHERE
Task.PriorityId = Priority.PriorityId AND
Taks.CustomerId = Customer.CustomerId AND
Taks.EmployId = Employee.EmployId
ORDER BY PriorityId ASC, Task.Deadline Task.RegDate ASC;
Detta resulterar naturligtvis inte i det jag vill att det ska göra med det står still i huvudet (och har gjort så ett tag) :)
Puh! Mycket eller?
LarsGMedlem sedan dec. 200012 464 inlägg SELECT * From Task, Priority, Customer, Employee
WHERE
Task.PriorityId = Priority.PriorityId AND
Taks.CustomerId = Customer.CustomerId AND
Taks.EmployId = Employee.EmployId
ORDER BY Customer.CustomerId,
PriorityId ASC, Task.Deadline Task.RegDate ASC
JonMedlem sedan juli 20011 304 inlägg Ok. det var ju det jag frågade efter men jag tror att jag frågar efter "fel sak". Är lite dimmig i formuleringarna idag :)
Säg att man letar reda på det ärende som har äldst Deadline. Plocka då fram alla ärenden som den kund som äger det ärendet har och visa dem i prioritetsordning, sen kommer det ärende som har nästa Deadline... osv.
Är det väldigt oklart formulerat?
Är det ett vettigt sätt att visa det hela på för övrigt?
Tänkte att man vill ha upp det ärendet som skall behandlas fortast överst men sen vill man ju inte att samma kund ska dyka upp tio rader senare så man missar att göra något och får springa tillbaks.
UlfTMedlem sedan maj 20018 027 inlägg
Jon skrev:
Säg att man letar reda på det ärende som har äldst Deadline. Plocka då fram alla ärenden som den kund som äger det ärendet har och visa dem i prioritetsordning, sen kommer det ärende som har nästa Deadline... osv.
Vilket är i så fall nästkommande ärende? Om det råkar ägas av samma kund som ägde det första ärendet, har det redan räknats upp. Och även om så inte är fallet, kommer du med den här logiken få massor med dubbla, tredubbla, etc, uppräkningar av varje ärende.
Jon skrev:
Är det ett vettigt sätt att visa det hela på för övrigt?
Tänkte att man vill ha upp det ärendet som skall behandlas fortast överst men sen vill man ju inte att samma kund ska dyka upp tio rader senare så man missar att göra något och får springa tillbaks.
Här frågar du efter något liknande som LarsG svarade på. Du skulle enkelt kunna fixa detta genom att modifiera hans svar något. Du behöver egentligen bara byta plats på några av kolumnerna efter "ORDER BY", så kan du sortera som du vill. Förslagsvis låter du slutet på satsen lyda:
ORDER BY Customer.CustomerID, Task.DeadLine, Priority
JonMedlem sedan juli 20011 304 inlägg NJae... Jag tror inte riktigt att jag uttrycker mig klart.
Ett ärende skall bara dyka upp en gång.
1. välj ärende med deadline som går ut om kortast tid
2. visa det ärendet och alla ärenden som hör till samma kund.
3. gå vidare till nästa ärende och gör samma sak.
Det kanske behövs lite programmeras lite oxå... hmmm...
Jag har varit inne lite på en subquery men får inte ihop det riktigt ändå.
UlfTMedlem sedan maj 20018 027 inlägg Du vill visa alla ärenden som hör ihop med en kund, tillsammans. Då sorterar du på kund i första hand.
Därefter vill du, för varje kund, sortera kundens ärenden i deadline-ordning. Då sorterar du på deadline i andra hand.
Sedan kan du om du vill sortera med avseende på prioritet på exakt samma vis, dvs prioritetsordning i tredje hand.
Du klarar allt detta med en enda sql-fråga.
JonMedlem sedan juli 20011 304 inlägg Ja! Där der man...
Det är klart att det funkar som ni säger :)
Tack för hjälpen.