webForumDet fria alternativet

Jämföra tabellinnehåll

ASP

12 svar · 333 visningar · startad av annesophie

Medlem sedan juni 20012 236 inlägg
Frågan#1

Hej,

Har fått TOTALT hjärnsläpp....kommer inte på lösningen till ett problem!

Jag har två tabeller (12797016_Nov02) och (12797016_Dec02), datan i båda tabellerna importeras från Excelfiler och fälten i tabellerna har därför samma namn (och det skall helst förbli så).

Informationen som finns i de båda tabellerna förändras månad för månad och meningen är att dom skall jämföras. Om informationen i ett fält, tex partNumber, för Nov02 är annorlunda informationen i samma fält fast i Dec02 så skall det markeras, annars skall nyaste fältet (Dec02) skrivas ut.

Demonstration...typ... ;)

IF rs("PartNumber") <> rs2("PartNumber") then
	response.write "Förändring har skett"
ELSE
	'Om samma så skriv ut den nyaste informationen, alltså från tabellen 12797016_[b]Dec[/b]02
	response.write rs2("PartNumber")
END IF

partNumber = numeriskt fält

Men jag får inte till select satsen...och därmed inte loopen som skall lista ett hundratal artiklar!

Hur ska jag jämföra data från olika tabeller när fälten har samma namn och hur skulle en loop för detta se ut !?????!

Ledtrådar någon!?

HELP! :x :(

/A

Medlem sedan jan. 20013 406 inlägg
#2

Är inte säker på om denna kod fungerar men den ger dig i alla fal lite hjälp.

sql = & _
"select A.Partnumber, B.Partnumber  from tabell1 as A, tabell2 as B " &_
"WHERE A.Partnumber = B.Partnumber " &_
"ORDER BY A.Partnumber DESC

Det handlar i alla fall om att du sätter exempelvis A. framför fältnamnet för att specificera vilken tabell det gäller. Sedan är jag inte så säker på hur man gör. Har fåt hjälp med det avklippan LarsG. Sök i SQL eller ASP forumet så hittar du säkert mer hjälp

Medlem sedan feb. 200112 078 inlägg
#3

Det kanske inte går att göra så, men.. :OO

SELECT * FROM table1 a INNER JOIN table2 b ON a.kol1 = b.kol1 WHERE a.kol1 <> b.kol1
Medlem sedan dec. 200012 464 inlägg
#4

Vad har tabellen för nyckelfält, dvs hur avgör du om det är samma post i de båda tabellerna?

Medlem sedan juni 20012 236 inlägg
#5

Tack för svaren...

LarsG>

Hmm vet inte om jag förstår dig helt rätt...

Men informationen i tabellerna går enligt radnummer, eller ID (primary key) i detta fallet.

Nedan har vi två månader. Ideén är att man skall kunna följa uppdateringar som sker för ett antal delar i en motor.
Det kan vara så att det ändras i ett fält från en månad till en annan, men det kan också vara så att en hel rad tas bort.

Jag måste jämföra de två tabellerna radvis och därmed fältvis.
Om ett fält i 12797016_Dec02 skiljer sig från föregående månads rapport, alltså 12797016_Nov02, så skall detta markeras
tex genom att skriva ut "<- ändring har skett" eller liknande (se *).

Det kan ju som sagt också vara så att en hel rad är borttagen då delen är borttagen ur motorn och då skulle jag helst
vilja att det markeras att "en rad fattas" (se **).

12797016_Dec02
primary key partnumber notes
1 00127992 levereras 03-02-01* <- ändring har skett
2 00127801 levereras 03-01-10
** <- rad borttagen
4 00127662 del slut på lager

12797016_Nov02
primary key partnumber notes
1 00127992 del slut på lager
2 00127801 levereras 03-01-10
3 00127221 utgående
4 00127662 del slut på lager

Men som sagt, jag har ingen aning vart jag skall börja...jag får inte till någon vettig selectsats...

/A

Medlem sedan dec. 200012 464 inlägg
#6

Då behövs en full outer join, om det inte finns direkt stöd i DBMS så går det att skriva som

select t1.partnumber,t2.notes
  from [12797016_DEC02] T1 inner join 
          [12797016_NOV02] t2 
on t1.partnummer=t2.partnummer
union all
select t1.patnumber,t1.notes 
from [12797016_DEC02] T1 left outer join 
        [12797016_NOV02] t2 
on t1.partnummer=t2.partnummer
where t2.partnumber is null
union all
select t2.patnumber,t2.notes 
from  [12797016_DEC02] T1 right outer join 
         [12797016_NOV02] t2 
on t1.partnummer=t2.partnummer
where t1.partnumber is null
order by partnumber

Varför har du så räliga tabellnamn? Att använda [] är inte sql-standard men behövs i Access t.ex. Egentligen skall man använda "12797016_NOV02"

Medlem sedan juni 20012 236 inlägg
#7

Varför har du så räliga tabellnamn? Att använda [] är inte sql-standard men behövs i Access t.ex. Egentligen skall man använda "12797016_NOV02"

Ha ha ja det kan man fråga sig. Jag får väl göra om...och göra rätt! ;)

WOW vilken....hmm "kod grej"!

Men, nu måste du förklara lite vad det är som händer i koden... Annars kommer jag bara att klippa och klistra och inte bli något klokare!

Sedan... :r :r :r :r :r :r (*1000) undrar jag hur fanken jag får ut resultatet av ovan kod? Alltså, jag är ju blott en novis i ASP djungeln Lars...

Jag fick följande...

Microsoft VBScript compilation error '800a03fd'

Expected 'Case'

/test/engine/index.asp, line 11

select t1.partnumber,t2.notes
-------^

/A ;)

Medlem sedan nov. 20017 144 inlägg
#8

Du måste väl sätta lite fnuttar och &_ och så vidare, annars så förväntas en select case-sats. (så är det!)

Medlem sedan feb. 200112 078 inlägg
#9

Alltså, LarsG:s kod är en SQL-sats. ;)

Du måste således skriva den ungefär såhär:

SQL = "select t1.partnumber,t2.notes" & _
"from [12797016_DEC02] T1 inner join " & _
"[12797016_NOV02] t2 " & _
"on t1.partnummer=t2.partnummer " & _
"union all" & _
"select t1.patnumber,t1.notes " & _
"from [12797016_DEC02] T1 left outer join " & _
"[12797016_NOV02] t2 " & _
"on t1.partnummer=t2.partnummer " & _
"where t2.partnumber is null " & _
"union all " & _
"select t2.patnumber,t2.notes " & _
"from  [12797016_DEC02] T1 right outer join " & _
"[12797016_NOV02] t2 " & _
"on t1.partnummer=t2.partnummer " & _
"where t1.partnumber is null " & _
"order by partnumber"

set rs = conn.execute(SQL)
Medlem sedan juni 20012 236 inlägg
#10

Hmm ok, jag får tacka så mycket för förklaringen OveRRide. Detta ser lite...mm...annorlunda ut än vad jag brukar göra. Därav min ovanligt förvirrade förvirring! :r

Jag fick fram en början, så nu är det väl bara att fortsätta klura...

TACKAR så mycket för hjälpen allihop! LarsG och OveRRIde > :f .
Men jag säger som Terminator - "I'll be back!" ;)

/A

Medlem sedan feb. 200112 078 inlägg
#11

En SQL-sträng som är ovanligt lång (eller strängar överhuvudtaget) kan kortas av med & _ för en radbrytning i koden.

Hade du skrivit LarsG:s kod på en rad, hade den raden blivit gaanska lång. ;) Plus att jag vet att LarsG inte gillar att scrolla i sidled. :OO ;)

Medlem sedan juni 20012 236 inlägg
#12

...och LarsG:s vilja är ju lag! Speciellt här i ASP forumet, eller hur! :birp

Medlem sedan feb. 200112 078 inlägg
#13

. :OO

274 ms totalt · 4 externa anrop · v20260731065814-full.6fe65c25
126 ms — deklarationer (db)
0 ms — hämta statistik (cache)
139 ms — hämta tråd, inlägg och bilagor (db)
133 ms — ändringar (db)