TSQL ORDER-BY avec UNION de jeux de données disparates
J'ai une question que les Syndicats deux un peu similaire ensembles de données, mais ils ont tous deux des colonnes qui ne sont pas présents dans les autres -- c'est à dire les colonnes ont des valeurs NULL dans le résultat de l'UNION. Le but de l'UNION est d'obtenir les données dans un format convivial pour le logiciel côté.
Le problème c'est que j'ai besoin d'ORDONNER les données obtenues en utilisant les colonnes qui n'existent que dans l'un ou l'autre ensemble.
Par exemple: Table1 a des champs ID, le Chat, le Prix. Table2 a des champs ID (le même que dans le tableau 1), Nom, Abbrv.
Ma requête ressemble à quelque chose comme ceci:
SELECT t1.ID, t1.Cat, t1.Price, NULL as Name, NULL as Abbrv FROM t1
UNION
SELECT t2.ID, NULL as Cat, NULL as Price, t2.Name, t2.Abbrv FROM t2
ORDER BY Price DESC, Abbrv ASC
La COMMANDE PAR est là que je suis bloqué. Les données ressemble à ceci:
100---Balls-----1.53----------------------
200---Bubbles---1.24----------------------
100---------------------RedBall----101RB--
100---------------------BlueBall---102BB--
200---------------------RedWand----201RW--
200---------------------BlueWand---202BW--
Mais je veux qu'elle ressemble à ceci:
100---Balls-----1.53----------------------
100---------------------RedBall----101RB--
100---------------------BlueBall---102BB--
200---Bubbles---1.24----------------------
200---------------------RedWand----201RW--
200---------------------BlueWand---202BW--
(toutes mes excuses si ceux-ci sont difficiles à lire--ne savais pas comment faire autrement pour afficher un tableau)
Garder à l'esprit que c'est un très simplifiés exemple et la proverbiale "utiliser une JOINTURE!" réponse n'est pas applicable (c'est à dire que je sais déjà comment les REJOINDRE, mais ce n'est pas ce que je veux dans le résultat final).
Il se peut très bien que la seule façon d'y parvenir est par la manipulation des données dans le logiciel une fois qu'il est de retour à partir des données de la couche--si c'est le cas, alors ainsi soit-il. Mais j'espère que cela peut être fait en TSQL.
source d'informationauteur NateJ
Vous devez vous connecter pour publier un commentaire.
En quelque sorte, vous devez connaître les données dans le tableau 2 sont liées à la table 1 et de partager le prix. Depuis le Null en abbrv viendra d'abord, il n'est pas nécessaire de créer un SortAbbrv colonne.
Vous devez utiliser de l'UNION, au lieu de l'UNION pour économiser le coût de la vérification des doublons.
Une solution rapide serait de faire 2 insertions dans une table temporaire ou une variable de table et dans le cadre de l'insérer dans la table temporaire, vous pouvez définir un indicateur de la colonne pour les aider à trier et de les ordonner par le drapeau de la colonne.
Sur le dessus de ma tête, je dirais que le pire scénario est que vous créez une table temporaire avec tous les champs faire une INSERTION DANS la table temporaire de deux T1 & T2 puis SÉLECTIONNEZ à partir de la table temporaire avec une commande par.
ie. Créer une table temporaire (par exemple. #temp) avec les champs Id, Chat, Prix, Nom, Abbrv, puis:
NB: je ne suis pas sûr à 100% sur le nul de la syntaxe à partir de semelles, mais je pense que cela fonctionnera.
EDIT: Ajout de la commande par le Prix & Abbrv après id... si l'Id n'a pas de lien T1 & T2 alors qu'est-ce?