IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

MS SQL Server Discussion :

Fusion de tables [2012]


Sujet :

MS SQL Server

  1. #1
    Membre averti
    Homme Profil pro
    Stagiaire
    Inscrit en
    Avril 2013
    Messages
    26
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Chine

    Informations professionnelles :
    Activité : Stagiaire

    Informations forums :
    Inscription : Avril 2013
    Messages : 26
    Par défaut Fusion de tables
    Bonjour a tous et a toutes !

    Tout d'abord, veuillez m'excuser mais mon clavier ne possède aucun accent :)

    Je suis confronte a un problème plutôt complexe (enfin, a mes yeux du moins):
    Je suis dans une entreprise ou cette bande de bananes ont décidé de créer 10 tables pour lister les équipements informatiques de l'entreprise, une par secteur. Se rendant compte de leur erreur, je dois fusionner ces 10 tables en ajoutant une colonne 'secteur'. Bon, jusque la, c'est easy.

    Le problème: quelques unes de ces 10 tables possèdent des colonnes supplémentaires du modèle standard et je n'ai aucun droit de modification dessus (pour harmoniser les colonnes et procéder par du c/c notamment).
    J'ai cru comprendre que la solution serait de créer une vue (que j'ai pas très bien compris comment ça marche, étant, avouons-le, un concombre en SQL Server - ne me demandez pas ce que ça veut dire).

    La question: Est-ce qu'il y a moyen, sans modifier les tables, de les fusionner en une seule puis de rajouter manuellement une colonne en spécifiant le secteur de chacune de ces données? Les colonnes supplémentaires au modèle standard seraient bien sur initialisées a la valeur NULL pour les tables qui normalement ne possèdent pas ces colonnes.

    Si c'est pas clair, n’hésitez pas a demander des éclaircissements.

    Merci d'avance pour toute information !

    Poh

  2. #2
    Modérateur

    Profil pro
    dba
    Inscrit en
    Janvier 2010
    Messages
    5 643
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : dba

    Informations forums :
    Inscription : Janvier 2010
    Messages : 5 643
    Par défaut
    Bonjour,

    Vous semblez être dans le cas typique d'héritage.

    Voici un peu de lecture sur le sujet...

    Et en résumé, pour répondre à votre question, vous pouvez créer une vue comme ceci

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    CREATE VIEW V_EQUIPEMENT
    AS
    SELECT 'Secteur1' AS Secteur, ColonneCommune, NULL as ColonneSpecifique
    FROM T_Secteur1
    UNION ALL
    SELECT 'Secteur2', ColonneCommune, ColonneSpecifique
    FROM T_Secteur2
    ...
    Mais je ne suis pas sur que cela corresponde à ce que vous voulez. pourriez vous donner plus de détail sur votre modèle et le but de l'opération ?

  3. #3
    Membre averti
    Homme Profil pro
    Stagiaire
    Inscrit en
    Avril 2013
    Messages
    26
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Chine

    Informations professionnelles :
    Activité : Stagiaire

    Informations forums :
    Inscription : Avril 2013
    Messages : 26
    Par défaut
    En lisant la requête SQL ça m'a l'air de correspondre exactement a la solution qu'il me faut :)
    Les tables ne sont pas liées, ce sont juste des regroupements d'informations.
    En gros, on a quelque chose du genre:

    compSecteur1
    id
    nom
    marque

    compSecteur2
    id
    nom
    marque

    compSecteur3
    id
    nom
    date d'achat
    marque

    etc... (avec 25 colonnes au total, parfois de nouvelles colonnes apparaissent et parfois certaines disparaissent)

    Aucune liaison entre les tables.

    Le but de l’opération... Que ce soit rangé, tout simplement. Plutôt que d'avoir 10 tables où l'on ne peut pas comparer bien les choses, autant rajouter une colonne et n'en faire qu'une, ce qui nous permet en plus de faire une interface Access pour faciliter la manipulation des données.

    Merci de votre aide, je testerai la requête et si j'ai des problèmes je posterai a nouveau (sinon je marquerai que c'est résolu) ! :)

    (puis faut que je regarde le lien aussi)

  4. #4
    Membre Expert Avatar de iberserk
    Homme Profil pro
    Architecte de base de données
    Inscrit en
    Novembre 2004
    Messages
    1 795
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Architecte de base de données
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2004
    Messages : 1 795
    Par défaut
    Je ne connais pas bien vos besoin en terme de requettage mais vous pouvez également penser à une modélisation par métadonnées.

    http://sqlpro.developpez.com/cours/m...n/metadonnees/

    Déjà expérimenté avec succès

  5. #5
    Membre averti
    Homme Profil pro
    Stagiaire
    Inscrit en
    Avril 2013
    Messages
    26
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Chine

    Informations professionnelles :
    Activité : Stagiaire

    Informations forums :
    Inscription : Avril 2013
    Messages : 26
    Par défaut
    Bonjour encore !

    Voici un screenshot d'une petite organisation que je me suis fait sur Excel, c'est moins le bordel que je pensais. Explications:
    -La ligne 1 c'est les noms des tables (colonne A c'est la table que je veux a la fin, colonnes B a J ce sont les tables actuelles).

    -Les cellules en vert c'est des colonnes manquantes (ex.: le secteur 'TJsub' [colonne D] ne possede pas de 'LCD_AssetNum' [ligne 15]), elles seront initialisees a la valeur NULL pour les tables qui ne les possedent pas (colonnes B,C,D et F) sauf pour la valeur Entity, cf. point juste en dessous.

    -La colonne 'Entity' [ligne 28], c'est ce que j'ai appele 'Secteur', chaque colonne verra sa valeur initialisee par les lettres apres 'Computers' dans le nom des tables (exemple: toutes les donnees provenant de la table colonne B auront pour valeur 'ATFAC' a Entity).

    J'ai donc essaye la requete suivante:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    CREATE VIEW V_LIVComputers
    AS
    SELECT 'ATFAC' AS Entity, Id, UserId, UserName, Siglum, [Device No], [Status], ScreenFilter, PC_AssetNum, PC_Model, PC_Type, PC_SN, [Owner], [PC DeliveryDate], LockNo, OS, CPU, Memory, HD, [E-port], Accessories,Remark,Vendor, NULL AS [Leasing (Y/N)], NULL AS LCD_AssetNum, NULL AS [Purchase/Leasing StartDate], NULL AS Location
    FROM [InfoCenter].[dbo].[LIVComputers_ATFAC]
    UNION ALL
    SELECT 'ATJTC' AS Entity, Id, UserId, UserName, Siglum, [Device No], [Status], ScreenFilter, PC_AssetNum, PC_Model, PC_Type, PC_SN, [Owner], [PC DeliveryDate], LockNo, OS, CPU, Memory, HD, [E-port], Accessories,Remark,Vendor, NULL AS [Leasing (Y/N)], NULL AS LCD_AssetNum, NULL AS [Purchase/Leasing StartDate], NULL AS Location
    FROM [InfoCenter].[dbo].[LIVComputers_ATJTC]
    UNION ALL
    SELECT 'TJSub' AS Entity, Id, UserId, UserName, Siglum, [Device No], [Status], ScreenFilter, PC_AssetNum, PC_Model, PC_Type, PC_SN, [Owner], [PC DeliveryDate], LockNo, OS, CPU, Memory, HD, [E-port], Accessories,Remark,Vendor, NULL AS [Leasing (Y/N)], NULL AS LCD_AssetNum, NULL AS [Purchase/Leasing StartDate], NULL AS Location
    FROM [InfoCenter].[dbo].[LIVComputers_TJsub]
    UNION ALL
    SELECT 'AC' AS Entity, Id, UserId, UserName, Siglum, [Device No], [Status], ScreenFilter, PC_AssetNum, PC_Model, PC_Type, PC_SN, [Owner], [PC DeliveryDate], LockNo, OS, CPU, Memory, HD, [E-port], Accessories,Remark,Vendor, [Leasing (Y/N)], LCD_AssetNum,[Purchase/Leasing StartDate], NULL AS Location
    FROM [InfoCenter].[dbo].[LIVComputersAC]
    UNION ALL
    SELECT 'ATDC' AS Entity, Id, UserId, UserName, Siglum, [Device No], [Status], ScreenFilter, PC_AssetNum, PC_Model, PC_Type, PC_SN, [Owner], [PC DeliveryDate], LockNo, OS, CPU, Memory, HD, [E-port], Accessories,Remark,Vendor, NULL AS [Leasing (Y/N)], NULL AS LCD_AssetNum, NULL AS [Purchase/Leasing StartDate], NULL AS Location
    FROM [InfoCenter].[dbo].[LIVComputersATDC]
    UNION ALL
    SELECT 'ECAC' AS Entity, Id, UserId, UserName, Siglum, [Device No], [Status], ScreenFilter, PC_AssetNum, PC_Model, PC_Type, PC_SN, [Owner], [PC DeliveryDate], LockNo, OS, CPU, Memory, HD, [E-port], Accessories,Remark,Vendor, [Leasing (Y/N)], LCD_AssetNum,[Purchase/Leasing StartDate], NULL AS Location
    FROM [InfoCenter].[dbo].[LIVComputersECAC]
    UNION ALL
    SELECT 'JV' AS Entity, Id, UserId, UserName, Siglum, [Device No], [Status], ScreenFilter, PC_AssetNum, PC_Model, PC_Type, PC_SN, [Owner], [PC DeliveryDate], LockNo, OS, CPU, Memory, HD, [E-port], Accessories,Remark,Vendor, [Leasing (Y/N)], LCD_AssetNum,[Purchase/Leasing StartDate], NULL AS Location
    FROM [InfoCenter].[dbo].[LIVComputersJV]
    UNION ALL
    SELECT 'RCS' AS Entity, Id, UserId, UserName, Siglum, [Device No], [Status], ScreenFilter, PC_AssetNum, PC_Model, PC_Type, PC_SN, [Owner], [PC DeliveryDate], LockNo, OS, CPU, Memory, HD, [E-port], Accessories,Remark,Vendor, [Leasing (Y/N)], LCD_AssetNum,[Purchase/Leasing StartDate], NULL AS Location
    FROM [InfoCenter].[dbo].[LIVComputersRCS]
    UNION ALL
    SELECT 'SC' AS Entity, Id, UserId, UserName, Siglum, [Device No], [Status], ScreenFilter, PC_AssetNum, PC_Model, PC_Type, PC_SN, [Owner], [PC DeliveryDate], LockNo, OS, CPU, Memory, HD, [E-port], Accessories,Remark,Vendor, [Leasing (Y/N)], LCD_AssetNum,[Purchase/Leasing StartDate], NULL AS Location
    FROM [InfoCenter].[dbo].[LIVComputersSC]
    ca, m'a renvoye l'erreur:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    Msg 451, Level 16, State 1, Procedure V_LIVComputers, Line 3
    Cannot resolve collation conflict for column 3 in SELECT statement.
    Msg 451, Level 16, State 1, Procedure V_LIVComputers, Line 3
    Cannot resolve collation conflict for column 6 in SELECT statement.
    Msg 451, Level 16, State 1, Procedure V_LIVComputers, Line 3
    Cannot resolve collation conflict for column 7 in SELECT statement.
    Msg 451, Level 16, State 1, Procedure V_LIVComputers, Line 3
    Cannot resolve collation conflict for column 9 in SELECT statement.
    Msg 451, Level 16, State 1, Procedure V_LIVComputers, Line 3
    Cannot resolve collation conflict for column 10 in SELECT statement.
    Msg 451, Level 16, State 1, Procedure V_LIVComputers, Line 3
    Cannot resolve collation conflict for column 12 in SELECT statement.
    Msg 451, Level 16, State 1, Procedure V_LIVComputers, Line 3
    Cannot resolve collation conflict for column 13 in SELECT statement.
    Msg 451, Level 16, State 1, Procedure V_LIVComputers, Line 3
    Cannot resolve collation conflict for column 16 in SELECT statement.
    Msg 451, Level 16, State 1, Procedure V_LIVComputers, Line 3
    Cannot resolve collation conflict for column 17 in SELECT statement.
    Msg 451, Level 16, State 1, Procedure V_LIVComputers, Line 3
    Cannot resolve collation conflict for column 18 in SELECT statement.
    Msg 451, Level 16, State 1, Procedure V_LIVComputers, Line 3
    Cannot resolve collation conflict for column 19 in SELECT statement.
    Msg 451, Level 16, State 1, Procedure V_LIVComputers, Line 3
    Cannot resolve collation conflict for column 20 in SELECT statement.
    Msg 451, Level 16, State 1, Procedure V_LIVComputers, Line 3
    Cannot resolve collation conflict for column 21 in SELECT statement.
    Msg 451, Level 16, State 1, Procedure V_LIVComputers, Line 3
    Cannot resolve collation conflict for column 22 in SELECT statement.
    Msg 451, Level 16, State 1, Procedure V_LIVComputers, Line 3
    Cannot resolve collation conflict for column 23 in SELECT statement.
    Je sais pas si ca change quelque chose, mais les tables n'ont pas les colonnes dans le meme ordre, c'est moi qui ai bien organise sur Excel mais en vrai parfois c'est (par exemple) dans l'ordre id nom ville et parfois id ville nom.

    Je vais jeter un coup d'oeil au lien iberserk en attendant, merci encore une fois !
    Images attachées Images attachées  

  6. #6
    Membre Expert Avatar de iberserk
    Homme Profil pro
    Architecte de base de données
    Inscrit en
    Novembre 2004
    Messages
    1 795
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Architecte de base de données
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2004
    Messages : 1 795
    Par défaut
    L'erreur semble indiquer que vos colonnes n'ont pas la même collation dans toute vos tables.

    Exemple:
    La colonne status doit avoir des collations différentes (au moins deux) sur les tables

  7. #7
    Membre averti
    Homme Profil pro
    Stagiaire
    Inscrit en
    Avril 2013
    Messages
    26
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Chine

    Informations professionnelles :
    Activité : Stagiaire

    Informations forums :
    Inscription : Avril 2013
    Messages : 26
    Par défaut
    D'accord, merci, j'avais pas tilte sur le collate parce que je savais meme pas ce que c'etait.
    Il y a moyen de le changer au transport? Puisque je n'ai pas des droits de modification sur la table. A priori j'ai besoin de Chinese_PRC_CI_AS. (j'ai vu la commande collate mais j'ai cru comprendre qu'elle ne fonctionne que sur un ALTER ou CREATE :/)

  8. #8
    Modérateur

    Profil pro
    dba
    Inscrit en
    Janvier 2010
    Messages
    5 643
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : dba

    Informations forums :
    Inscription : Janvier 2010
    Messages : 5 643
    Par défaut
    oui, vous pouvez le faire au moment de la selection :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    SELECT LaColonne COLLATE LaCollation AS Alias, ...
    FROM ...

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Fusion de tables.
    Par Julieta dans le forum Access
    Réponses: 2
    Dernier message: 06/08/2007, 17h17
  2. [Requete] Fusion de tables
    Par arn.oo dans le forum Requêtes et SQL.
    Réponses: 4
    Dernier message: 19/04/2007, 14h32
  3. [WD 9]fusion de tables
    Par milfra12 dans le forum WinDev
    Réponses: 2
    Dernier message: 30/01/2007, 08h16
  4. fusion de table avec un champ en commun
    Par chamoix dans le forum Access
    Réponses: 3
    Dernier message: 13/12/2006, 23h18
  5. importation et fusion de tables access
    Par M@X_be dans le forum Access
    Réponses: 2
    Dernier message: 20/11/2005, 00h37

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo