[SQL] Record nummers op basis van twee waarden

Pagina: 1
Acties:

  • Deddiekoel
  • Registratie: Maart 2000
  • Laatst online: 12-11-2025

Deddiekoel

Gadget nerd

Topicstarter
Ik zou graag willen weten of het volgende mogelijk is met SQL. Ik heb hiervoor zelf al wat geprobeert maar liep al (heel) snel vast.

Wat ik wil bereiken is dat in een view er rij nummers worden gegenereerd op basis van twee fields uit die record. Zoiets als het volgende voorbeeld. Een tabel bevat orderregels, dus voor een bepaald ordernummer bestaan er meerdere records. Maar voor elk record kan weer een bepaald lijntype hebben. Wat ik zou willen is dat voor elke order een teller de verschillende lijntypes telt. Dat zou zoiets moeten opleveren (field teller moet dus gegenereerd worden):
code:
1
2
3
4
5
6
7
8
9
TELLER  ORDER#  LINETYPE
1        10001      A
1        10002      B
2        10002      B
2        10001      A
1        10002      A
2        10002      A
3        10002      A
2        10001      A


Iemand enig idee hoe je zoiets dergelijks zou kunnen aanpakken?

[ Voor 3% gewijzigd door Deddiekoel op 09-03-2005 21:10 ]

Verlanglijstje: Switch 2, PS5 Pro Most wanted: Switch 2


  • ggvw
  • Registratie: September 2001
  • Laatst online: 15-12-2024
Dus per order het aantal verschillende lijntypes tellen?

Was je niet toevallig op zoek naar een 'group by'?

Misschien heb je iets aan het voorbeeld op deze pagina waarin een group by samen wordt gebruikt met een count()?
http://www.techonthenet.com/sql/count.htm

[ Voor 19% gewijzigd door ggvw op 09-03-2005 21:57 ]


  • NMe
  • Registratie: Februari 2004
  • Laatst online: 15-04 22:07

NMe

Quia Ego Sic Dico.

SQL:
1
2
3
SELECT COUNT([linetype]) AS teller, [order#]
FROM tabel
GROUP BY [order#]

(Dat werkt in Access, in MySQL moet je backticks ( ` ) gebruiken in plaats van rechte haken. :P)

[ Voor 37% gewijzigd door NMe op 09-03-2005 22:04 ]

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


  • Deddiekoel
  • Registratie: Maart 2000
  • Laatst online: 12-11-2025

Deddiekoel

Gadget nerd

Topicstarter
Hmmm, dat komt in de buurt. Ik krijg zo een totaal van het aantal lijntypes, maar het moet een soort van sequencenummer zijn.

Verlanglijstje: Switch 2, PS5 Pro Most wanted: Switch 2


  • NMe
  • Registratie: Februari 2004
  • Laatst online: 15-04 22:07

NMe

Quia Ego Sic Dico.

Deddiekoel schreef op donderdag 10 maart 2005 @ 08:48:
Hmmm, dat komt in de buurt. Ik krijg zo een totaal van het aantal lijntypes, maar het moet een soort van sequencenummer zijn.
Ik denk dat je dan al in programma/scriptcode moet gaan denken. Volgens mij kan zoiets niet met SQL, hooguit misschien als je zelf variabelen bij gaat houden.

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


  • Deddiekoel
  • Registratie: Maart 2000
  • Laatst online: 12-11-2025

Deddiekoel

Gadget nerd

Topicstarter
Daar was ik al bang voor, maar je weet nooit...

Verlanglijstje: Switch 2, PS5 Pro Most wanted: Switch 2


  • raptorix
  • Registratie: Februari 2000
  • Laatst online: 17-02-2022
Het kan via een cursor, maar als dit een vaak terugkomende select is zou ik toch je datamodel uitbreiden met een extra field, deze kan je eventueel eenmalig updaten via een cursor.

Als je echt een pro bent pas je dit voorbeeldje aan waar je dus geen cursor gebruikt ;)

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
select OD.OrderID, LineNumber, OD.ProductID, UnitPrice, Quantity, Discount 
from Northwind.dbo.[Order Details] OD
join 
(select count(*) LineNumber, 
a.OrderID, a.ProductID
from Northwind.dbo.[Order Details] A join
Northwind.dbo.[Order Details] B 
on A.ProductID >= B.ProductID
and A.OrderID = B.OrderID
group by A.OrderID, A.ProductID) N
on OD.OrderID= N.OrderID and 
OD.ProductID = N.ProductID
where OD.OrderID < 10251
order by OD.OrderID, OD.ProductID


Staat aardig artikel op : http://www.sqlservercentr...n/sequentialnumbering.asp

[ Voor 70% gewijzigd door raptorix op 10-03-2005 11:16 ]


  • _js_
  • Registratie: Oktober 2002
  • Laatst online: 13-01 07:19
Ervan uitgaande dat Order# en Linetype samen uniek zijn:
SQL:
1
2
3
4
5
6
SELECT [Order#],Linetype,(
  SELECT COUNT(*)
  FROM Tabel t2
  WHERE t2.[Order#] = t1.[Order#] AND t2.Linetype <= t1.Linetype
)
FROM Tabel t1

[ Voor 4% gewijzigd door _js_ op 10-03-2005 12:02 ]


  • Deddiekoel
  • Registratie: Maart 2000
  • Laatst online: 12-11-2025

Deddiekoel

Gadget nerd

Topicstarter
raptorix schreef op donderdag 10 maart 2005 @ 11:09:
Het kan via een cursor, maar als dit een vaak terugkomende select is zou ik toch je datamodel uitbreiden met een extra field, deze kan je eventueel eenmalig updaten via een cursor.

Als je echt een pro bent pas je dit voorbeeldje aan waar je dus geen cursor gebruikt ;)

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
select OD.OrderID, LineNumber, OD.ProductID, UnitPrice, Quantity, Discount 
from Northwind.dbo.[Order Details] OD
join 
(select count(*) LineNumber, 
a.OrderID, a.ProductID
from Northwind.dbo.[Order Details] A join
Northwind.dbo.[Order Details] B 
on A.ProductID >= B.ProductID
and A.OrderID = B.OrderID
group by A.OrderID, A.ProductID) N
on OD.OrderID= N.OrderID and 
OD.ProductID = N.ProductID
where OD.OrderID < 10251
order by OD.OrderID, OD.ProductID


Staat aardig artikel op : http://www.sqlservercentr...n/sequentialnumbering.asp
Bestaat zo'n cursor ook op Oracle? Want daarmee werk ik zelf het meest.

Verlanglijstje: Switch 2, PS5 Pro Most wanted: Switch 2


  • raptorix
  • Registratie: Februari 2000
  • Laatst online: 17-02-2022
Ja cursors bestaan ook op Oracle, het gebruik op Sql Server valt in principe af te raden omdat het qua performance niet echt fijn is.

  • rb338
  • Registratie: Januari 2001
  • Laatst online: 04-03 19:38
_js_ schreef op donderdag 10 maart 2005 @ 12:01:
Ervan uitgaande dat Order# en Linetype samen uniek zijn:
SQL:
1
2
3
4
5
6
SELECT [Order#],Linetype,(
  SELECT COUNT(*)
  FROM Tabel t2
  WHERE t2.[Order#] = t1.[Order#] AND t2.Linetype <= t1.Linetype
)
FROM Tabel t1
Order# en linetype zijn dus samen niet uniek.
Hij wil juist per combinatie aangeven hoe vaan die combinatie voorkomt.

  • Swa-baldie
  • Registratie: Juni 2002
  • Laatst online: 19-06-2023
hier stond iets nav niet goed lezen...

[ Voor 78% gewijzigd door Swa-baldie op 10-03-2005 14:46 ]


  • Deddiekoel
  • Registratie: Maart 2000
  • Laatst online: 12-11-2025

Deddiekoel

Gadget nerd

Topicstarter
rb338 schreef op donderdag 10 maart 2005 @ 14:19:
[...]

Order# en linetype zijn dus samen niet uniek.
Hij wil juist per combinatie aangeven hoe vaan die combinatie voorkomt.
Ik moet ook geen totaal hebben ik wil per regel een nummer hebben dat aangeeft hoe vaak die combi al is voor gekomen. Zie voorbeeld bovenaan.

Verlanglijstje: Switch 2, PS5 Pro Most wanted: Switch 2

Pagina: 1