Toon posts:

[MS SQL 6.5] Tabelopschoning.

Pagina: 1
Acties:

Verwijderd

Topicstarter
Ik heb in MS SQL een tabel met laten we zeggen de velden

A (identity/int)
B (int)
C (varchar)
D (varchar)
E (varchar)

Daar deze tabel nogal vervuild is wil ik een nieuwe tabel aanmaken met de velden B, C en D erin.

Opzich natuurlijk geen probleem om een select uit de ene tabel te doen en tegelijkertijd te inserten in de andere.

Echter, veld C is een varchar veld met vele dubbelen. De rows die dus dubbel zijn op veld C wil ik niet mee selecten, dit ter opschoning van het hele zaakje.

Ik neem aan dat ik met GROUP BY of in het smerigste geval met DISTINCT moet werken, ik krijg het echter niet voor elkaar. Iemand?

  • whoami
  • Registratie: December 2000
  • Laatst online: 10:21
Wat heb je dan al geprobeerd?
Een Distinct kan je niet uitvoeren op 1 veld alleen, maar dat werkt op alle geselecteerde columns. Een rij moet dus uniek zijn.
Met een group by kan je het eventueel doen, maar dan moet je wel aangeven welke rij je dan wel wilt inserten, maw, je moet aangeven voor welke waarde B en D er nu een record moet gemaakt worden met C.

https://fgheysels.github.io/


Verwijderd

Topicstarter
Distinct heb ik inmiddels wel geprobeerd, en dat werkte inderdaad niet. Met een Group By heb ik het tot zover geprobeerd:

SELECT B,C,D FROM Tabel GROUP BY B,C,D

Echter, ik wil alleen "groupen by" B, en als ik alleen B ophaal en group by B doe dan krijg ik dus 60 records minder terug (hoe minder = hoe schoner = hoe beter in dit geval).

Je uitleg is me helaas niet helemaal duidelijk overigens.

  • whoami
  • Registratie: December 2000
  • Laatst online: 10:21
'groupen by' kun je enkel doen op de columns in uw select-clause die geen aggregated columns zijn, en groupen by moet je dus enkel doen als een van de columns in uw select list het resultaat is van een aggr. function (zoals MAX, MIN, COUNT, ....)

https://fgheysels.github.io/


  • Annie
  • Registratie: Juni 1999
  • Laatst online: 25-11-2021

Annie

amateur megalomaan

Wat whoami dus zegt is dat dit niet kan:
code:
1
2
3
SELECT   B, C, D
FROM     Tabel
GROUP BY C

Maar dit bijvoorbeeld wel
code:
1
2
3
SELECT   MIN(B), C, MIN(D)
FROM     Tabel
GROUP BY C

Today's subliminal thought is: