Précédent   Forum des professionnels en informatique > Bases de données > MS SQL-Server > Développement
Développement Forum d'entraide sur le Transact-SQL, le CLR, les procédures stockées, les triggers, les requêtes SQL
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 04/01/2012, 10h21   #1
Invité de passage
 
Inscription : juillet 2009
Messages : 9
Détails du profil
Informations forums :
Inscription : juillet 2009
Messages : 9
Points : 1
Points : 1
Par défaut DISTINCT sur une partie des colonnes

Bonjour,

J'ai une table contenant le nom de comptes SRC à rajouter dans une autre table COMPTES. Dans ma table SRC, j'ai plusieurs fois le même nom, dans ma table COMPTES, je ne dois pas avoir le même nom.
J'ai donc besoin de m'assurer que le nom d'un des comptes à rajouter n'existe pas déjà dans ma table de destination.

Table SRC:
Name

Table COMPTES:
AccountId,
Name

Si le nom existe déjà dans ma table COMPTES, je récupère l'AccountId de celui-ci. Sinon, j'en crée un nouveau.

Voici ce que je pensais faire:(Pour le SELECT, le INSERT INTO ne posera pas de problème)

SELECT DISTINCT SRC.Name, ISNULL (COMPTES.AccountId, newid())
FROM src SRC
LEFT JOIN dest COMPTES ON SRC.Name= COMPTES.Name COLLATE French_CI_AI

Le problème c'est que ce SELECT me ramène également les doublons de ma table SRC et qu'il crée pour chacun d'entre eux un nouvel Id.
moshehayun est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/01/2012, 10h45   #2
Modérateur
 
Homme
Administrateur de base de données
Inscription : août 2007
Messages : 1 159
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 28
Localisation : Belgique

Informations professionnelles :
Activité : Administrateur de base de données
Secteur : Industrie Pharmaceutique

Informations forums :
Inscription : août 2007
Messages : 1 159
Points : 1 608
Points : 1 608
Quelque chose du genre ?

Code :
1
2
3
4
5
6
7
8
 
WITH CTE_SourceClean AS
( 
  SELECT DISTINCT name FROM SRC
)
SELECT DISTINCT SRC.Name, ISNULL (COMPTES.AccountId, newid())
FROM CTE_SourceClean SRC
LEFT JOIN dest COMPTES ON SRC.Name= COMPTES.Name COLLATE French_CI_AI
Edit:
Au fait, quelles sont les raisons pour lequelles vous utilisez un GUID comme id ?
Ptit_Dje est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/01/2012, 12h13   #3
Invité de passage
 
Inscription : juillet 2009
Messages : 9
Détails du profil
Informations forums :
Inscription : juillet 2009
Messages : 9
Points : 1
Points : 1
J'utilise des GUID, car je suis sur un projet pour CRM, et c'est ce dont j'ai besoin.

Merci de votre aide. Ca marche...
moshehayun est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 06h28.


 
 
 
 
Partenaires

Hébergement Web