Alltså.. Hur gör man? Jag lyckas inte få till det. Jag sitter med en databas som tyvär inte är normaliserad enligt konstens alla regler och har inkonsistens i ett fält som å andra sidan inte borde existera så lägg ingen energi på att försöka få mig att ta bort fältet för det är tyvär inte ett alternativ.
Problemet.
Något förenklat sitter med något som skulle kunna likställas med följande situation.
Tabell 1 - Hojmärken
Tabel 2 - Exemplar
Tabell 1 skulle kunna se ut som följer:
MärkeID Märke Antal
1 Honda 2
2 Kawa 5
3 Yamaha 1
Tabell 2 skulle kunna se ut som såhär:
MärkeID ID RegNr
1 34 KVM123
1 36 MCL234
1 45 POP098
2 76 KMH745
2 45 MJU678
2 87 MPO120
3 95 YGT765
....Nu ser det inte ut exakt såhär men något förenklat är det här nära sanningen.
Problemet är fältet ANTAL (som förvisso inte borde existera men det är en annan diskussion)
ANTAL skall alltså innehålla antalet hojar av resp märke och som kan utläsas av tabell 2 är detta fält alltså felknullat av en eller annan anledning för vissa märken...
Jag har således en fråga som ser ut ungefär som såhär för att ta fram de felaktiga...
Select m.MärkeID, m.Antal, e.Count(e.markeid) as realCount
From Marke M
Join exemplar e on e.markeid=m.markeid
group by m.markeid, m.antal
having count(e.markeid)<>m.antal
Där får jag snyggt och prydligt ut alla felaktiga rader och "realCount" anger det egentliga antalet.
Så nu till frågan:
Hur uppdaterar jag "antal" för alla felaktiga märken med det framräknade antal som jag får ut av min fråga?
....på rikgtigt är det fler tabeller inblandade och lite where-villkor men jag skulle bara vilja veta hur jag skall utforma min update (eller hur ett sql-server-script skulle kunna utformas)
Problemet.
Något förenklat sitter med något som skulle kunna likställas med följande situation.
Tabell 1 - Hojmärken
Tabel 2 - Exemplar
Tabell 1 skulle kunna se ut som följer:
MärkeID Märke Antal
1 Honda 2
2 Kawa 5
3 Yamaha 1
Tabell 2 skulle kunna se ut som såhär:
MärkeID ID RegNr
1 34 KVM123
1 36 MCL234
1 45 POP098
2 76 KMH745
2 45 MJU678
2 87 MPO120
3 95 YGT765
....Nu ser det inte ut exakt såhär men något förenklat är det här nära sanningen.
Problemet är fältet ANTAL (som förvisso inte borde existera men det är en annan diskussion)
ANTAL skall alltså innehålla antalet hojar av resp märke och som kan utläsas av tabell 2 är detta fält alltså felknullat av en eller annan anledning för vissa märken...
Jag har således en fråga som ser ut ungefär som såhär för att ta fram de felaktiga...
Select m.MärkeID, m.Antal, e.Count(e.markeid) as realCount
From Marke M
Join exemplar e on e.markeid=m.markeid
group by m.markeid, m.antal
having count(e.markeid)<>m.antal
Där får jag snyggt och prydligt ut alla felaktiga rader och "realCount" anger det egentliga antalet.
Så nu till frågan:
Hur uppdaterar jag "antal" för alla felaktiga märken med det framräknade antal som jag får ut av min fråga?
....på rikgtigt är det fler tabeller inblandade och lite where-villkor men jag skulle bara vilja veta hur jag skall utforma min update (eller hur ett sql-server-script skulle kunna utformas)