[asp/sql]Lege data selecten totdat er data is

Pagina: 1
Acties:

  • TeeDee
  • Registratie: Februari 2001
  • Laatst online: 11:34
Hoi,

Weet even niet of het een UberN00b vraag is maar het volgende:

Ik heb een MS SQL table:
code:
1
BookletID | LeftPageTop | LeftPageBottom | RightPageTop | RightPageBottom


Daar komt, uiteraard, data in te staan. Nu kan het voorkomen, dat LeftPageTop en/of RightPageTop leeg is.

in deze structuur komt het in de database te staan:
code:
1
2
3
2550 |<NULL> | Cover.pdf |<NULL> | BLANC-A4.pdf
2551 | Dec2-94080.pdf | Dec2-94080.pdf | Dec2-94080.pdf | Dec2-94080.pdf
2552 | <NULL>| Orderform.pdf | <NULL> | <NULL>


Nu wil ik dus tellen hoeveel records er leeg zijn in de velden LeftPageTop OR RightPageTop totdat er weer een LeftPageTop en/of RightPageTop gevuld is. Daarna moet ie stoppen met tellen!

Heb al van alles geprobeerd. Elke mogelijke Loop combinatie die ik ken. Zelfs stom ernaar gekeken (wat uiteraard niet hielp!) Maar ik kom er dus echt niet meer uit.

Mijn vraag is dus:

Hoe zou ik dit op kunnen lossen? En dan bedoel ik evt. een combo tussen een Loop en een snuggere SQL query!

Heart..pumps blood.Has nothing to do with emotion! Bored


  • mulder
  • Registratie: Augustus 2001
  • Laatst online: 31-08 15:46

mulder

ik spuug op het trottoir

heb je wel eens van WHERE gehoord?

oogjes open, snaveltjes dicht


  • TeeDee
  • Registratie: Februari 2001
  • Laatst online: 11:34
Tuurlijk, maar dan selecteert ie alle lege data. Dat moet dus niet. Hij moet selecteren / counten totdat er data in een veld staat

Heart..pumps blood.Has nothing to do with emotion! Bored


  • mulder
  • Registratie: Augustus 2001
  • Laatst online: 31-08 15:46

mulder

ik spuug op het trottoir

Begin even bij het begin. Kun je een SQL query maakt die alle records selecteert waarbij die velden leeg zijn?

oogjes open, snaveltjes dicht


  • robjanssen
  • Registratie: September 2001
  • Laatst online: 02-08 16:10

robjanssen

Software Developer

Je maakt toch gewoon een loop?
Eertst doe je SELECT COUNT(LeftPageTop), COUNT(RightPageTop).
Deze waarde sla je op in variabelen.
Vervolgens doe je weer een SELECT COUNT(LeftPageTop), COUNT(RightPageTop).
De uitkomt vergelijk je met de waarden in de variabelen.
Als deze gelijk zijn begin je de loop weer opnieuw en ander stop je.

  • TeeDee
  • Registratie: Februari 2001
  • Laatst online: 11:34
Ik heb met de volgende Query:
code:
1
2
SELECT COUNT(LeftPageTop)AS LeftPageTopCount, COUNT(RightPageTop)AS RightPageTopCount 
FROM dbo.BookletTbl WHERE LeftPageTop = '' OR RightPageTop = ''

Hieruit kwam: 24 en 24
Maar in de huidige vorm, zoals ik hem nu heb staan zal ik dus eigenlijk moeten stoppen bij 1. Omdat ik maar 1 record heb waarbij deze 2 waardes leeg zijn. Owke, er zijn er wel meer leeg, maar er staan records tussen die niet leeg zijn! Alles wat daarna komt zal ie dus eigenlijk niet eens meer moeten counten!

Heart..pumps blood.Has nothing to do with emotion! Bored


  • mulder
  • Registratie: Augustus 2001
  • Laatst online: 31-08 15:46

mulder

ik spuug op het trottoir

Dan zul je toch je hele tabel moeten door fietsten denk ik. Elk record testen en een tellertje bij houden.

oogjes open, snaveltjes dicht


  • TeeDee
  • Registratie: Februari 2001
  • Laatst online: 11:34
Maar hoe zie jij dat tellertje?
Ik kan me voorstellen dat als ik dat tellertje laat lopen dat ie alleen kan checken of het veld leeg is, of gevuld. Maar dan? Ik kan dan niet uit het tellertje vissen of hij voor of na de gevulde velden was. Of wel?

Heart..pumps blood.Has nothing to do with emotion! Bored


  • mulder
  • Registratie: Augustus 2001
  • Laatst online: 31-08 15:46

mulder

ik spuug op het trottoir

Pseudo:
code:
1
2
3
4
5
6
7
8
emptyRecords = 0
rst = "SELECT Veld1, Veld2 FROM Tabel"
while not rst.EOF
  if rst.Veld1 = '' AND rst.Veld2 = ''
    emptyRecords = emptyRecords + 1
  else
    break?
loop


Edit:
Volgens mij je nl niet in SQL een WHERE statement uitvoeren 'totdat'

oogjes open, snaveltjes dicht


  • Woy
  • Registratie: April 2000
  • Niet online

Woy

Moderator Devschuur®
je kan toch gewoon doen

code:
1
2
3
4
5
6
7
8
select count(BookletID)
from table
where BookletID > (
                     Select Max(BookletID)
                     From Table
                     Where LeftPageTop is not NULL
                     And RightPageTop is not NULL
                  )

“Build a man a fire, and he'll be warm for a day. Set a man on fire, and he'll be warm for the rest of his life.”


  • Woy
  • Registratie: April 2000
  • Niet online

Woy

Moderator Devschuur®
edit:
Oeps quote in plaats van edit

“Build a man a fire, and he'll be warm for a day. Set a man on fire, and he'll be warm for the rest of his life.”


  • mulder
  • Registratie: Augustus 2001
  • Laatst online: 31-08 15:46

mulder

ik spuug op het trottoir

Dan krijg je toch ook alle records waar die twee velden NULL zijn?

oogjes open, snaveltjes dicht


  • TeeDee
  • Registratie: Februari 2001
  • Laatst online: 11:34
rwb, dan zit je nog dat ie alle lege velden pikt. En dat is het dus niet, maar volgens mij kom ik wel verder met die loop van "de Don". Hoewel die sterk op de mijnes leek. Ik had het probleem dat heel erg lang erover gedaan werd. Bleek dus dat een rst.MoveNext() wonderen doet. Dat was een stukje code wat ik er niet ingezet had :(

Maar ik ben nu eindelijk zover! Thanks all!

Heart..pumps blood.Has nothing to do with emotion! Bored


  • Woy
  • Registratie: April 2000
  • Niet online

Woy

Moderator Devschuur®
TeeDee schreef op 08 oktober 2002 @ 20:02:
rwb, dan zit je nog dat ie alle lege velden pikt. En dat is het dus niet, maar volgens mij kom ik wel verder met die loop van "de Don". Hoewel die sterk op de mijnes leek. Ik had het probleem dat heel erg lang erover gedaan werd. Bleek dus dat een rst.MoveNext() wonderen doet. Dat was een stukje code wat ik er niet ingezet had :(

Maar ik ben nu eindelijk zover! Thanks all!
Nee volgens mij niet. Want in de sub query selecteer ik alle records en daarvan bepaal ik het hoogste id wat niet alebei de velden null heeft. Met de hoofd query tel ik daarna welke velden een hoger id hebben als de maximale id met niet null values. Dat zijn dus alleen de records boven die met niet null.

mmm volgens mij leg ik het niet echt duidelijk uit :)

“Build a man a fire, and he'll be warm for a day. Set a man on fire, and he'll be warm for the rest of his life.”


  • Woy
  • Registratie: April 2000
  • Niet online

Woy

Moderator Devschuur®
ik zal eens even proberen te laten zien wat ik bedoel

6 -> null
5 -> null
4 -> null
3 -> niet null
2 -> niet null
1 -> null

met die select max(id) selecteer ik nou dus 3. En daarna count ik alle id's die hoger zijn als 3. dat zijn dus 6, 5 en 4 dus het antwoord zou 3 moeten zijn. Of is dat niet wat je wilt berijken?

“Build a man a fire, and he'll be warm for a day. Set a man on fire, and he'll be warm for the rest of his life.”


  • TeeDee
  • Registratie: Februari 2001
  • Laatst online: 11:34
in je voorbeeld zou het antwoord 1 moeten zijn! Maar zoals gezegd, het is opgelost.
Maar zal het e.e.a. wat hier staat weer onthouden! :+

Heart..pumps blood.Has nothing to do with emotion! Bored


  • Woy
  • Registratie: April 2000
  • Niet online

Woy

Moderator Devschuur®
TeeDee schreef op 08 oktober 2002 @ 20:08:
in je voorbeeld zou het antwoord 1 moeten zijn! Maar zoals gezegd, het is opgelost.
Maar zal het e.e.a. wat hier staat weer onthouden! :+
ja oke dan moet je min gebruiken natuurlijk :)

“Build a man a fire, and he'll be warm for a day. Set a man on fire, and he'll be warm for the rest of his life.”


  • mulder
  • Registratie: Augustus 2001
  • Laatst online: 31-08 15:46

mulder

ik spuug op het trottoir

Dat zou kunnen kloppen, maar volgens mij moet het dan net andersom :P

oogjes open, snaveltjes dicht

Pagina: 1