Question

J'ai une table qui a environ 40 colonnes. La seule différence dans les noms de colonnes est que le dernier 20 commencent tous par « B » avant le nom de la colonne. Ce tableau est utilisé pour comparer. En d'autres termes, comparer les données dans les 20 premières colonnes aux données dans les 20 dernières colonnes.

Je sais ce qui est très mauvaise conception, alors comment ce tableau doit être repensé, de sorte qu'il n'y a que 20 colonnes, mais nous pouvons encore comparer les données?

EDIT: si elle aide, nous utilisons également ces données pour trouver une cohorte appariée

Notez également que la performance est la principale préoccupation ici. En dupliquant les colonnes l'obtention des données est extrêmement rapide.

Merci!

Était-ce utile?

La solution

Deux architectures possibles et une pointe de requête.

1) Construire votre table avec une colonne « Type », et l'utiliser pour marquer « primaire » par rapport à « alternatif ». Dans votre cas, "A" par rapport à "B" pourrait être approprié.

2) Construire une cloison verticale, deux tables identiques (pour les données principales et secondaires), qui partagent une clé primaire commune. (Si Id = 42 est dans une table, il doit être dans l'autre - à moins que des données « alternate » est facultative, auquel cas ne remplit pas la deuxième table.) En outre le cas échéant, une troisième table qui suit possible primaire clés, ainsi que des données qui est connu pour être toujours commun aux deux tables.

Astuce: Lire sur SELECT ... SAUF et SELECT ... INTERSECT. Ils courent fâcheusement rapidement, et sont idée pour comparer toutes les colonnes et les lignes entre deux ensembles de données pour les différences (sauf) et matchs (Intersection). Vous pouvez utiliser ce assez facilement avec l'une des deux structures, et il travaillerait avec votre code existant aussi bien (bien qu'il puisse être fussier d'écrire la requête).

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top