2009-03-30 5 views
1
  1. J'ai une instruction select qui me retourner 5 valeurs val1, val3, val5, val2, Val4
  2. J'ai une autre instruction select qui va retourner un jeu d'enregistrements avec l'une des colonnes ayant des valeurs de l'ensemble ci-dessus (val1 à val5)

Est-il possible de trier la deuxième instruction select avec le résultat de la première instruction select? Je veux dire dans l'ordre de val1, val3, val5, val2, val4.Fusionner Sélectionner une instruction et la commander dynamiquement?

Cela signifie que si la première instruction inverse l'ordre, je dois inverser l'ordre.

S'il vous plaît laissez-moi savoir si cela est possible.

+0

Pouvez-vous poster un script montrant comment créer les tables que vous utilisez (peut être des versions échantillons) et un échantillon sélectionnez une déclaration pour chacun? De cette façon, vous obtiendrez de meilleures réponses. –

Répondre

1

Vous avez pas posté vos requêtes réelles, donc je peux être en supposant qu'ils sont plus simples que ce qu'ils sont, mais si votre première déclaration était:

select val from valuetable order by someothercolumn 

alors votre deuxième requête pourrait être

select table2.name, table2.phonenumber, table2.creationdate, table2.val 
from table2 
left join valuetable on table2.val = valuetable.val 
order by valuetable.someothercolumn 

En d'autres termes, vous pouvez copier l'ordre de votre première déclaration à la seconde.

0

Je ne suis pas du tout sûr de comprendre votre question, mais je vais essayer.

  • Augmenter la première requête avec un numéro de ligne (IIRC, serveur MSSQL 2005 a une fonction ROW_NUMBER())
  • rejoindre sur le val #, et trier le numéro de ligne associé
  • bande le numéro de la ligne du résultat
0

On peut supposer que la première déclaration a une commande sur elle (si elle ne l'a pas, l'ordre des « val » s serait arbitraire, et vous would'nt soin d'eux.

Alors, prenez la deuxième déclaration (qui retourne les données), et gauche à la première (qui renvoie le "val" s ordonné) sur les vals, et l'ordre par quel que soit l'ordre de la première déclaration par est

0

Je ne suis pas sûr que je bien comprendre la question, mais essayez ceci. Je suppose que vos tableaux ressemblent à ceci?

Table1: 
myfield1 
val1 
val2 
val2 

Table2: 
myField2 myDataField 
val1  test1 
val2  test2 
val3  test3 

alors votre déclaration sql ressemblerait à ceci

SELECT myDataField 
FROM Table2 INNER JOIN Table1 ON Table2.myField2=Table1.myField1 
ORDER BY Table1.myField1 

HTH

0

 
Simple answer: Yes

...But you have to use a secondary ordering column and a nested inner select.

TableOne ValColumn +------+ | val1 | +------+ | val3 | +------+ | val5 | +------+ | val2 | +------+ | val4 | +------+

SelectSetOne rank ValColumn +--------+----------+ | 1 | val1 | +--------+----------+ | 2 | val3 | +--------+----------+ | 3 | val5 | +--------+----------+ | 4 | val2 | +--------+----------+ | 5 | val4 | +--------+----------+

TableTwo ValColumn Col
+-----------+------+ | valN | .... | +-----------+------+

Final Select rank ValColumn Col
+--------+-----------+------+ | 1 | val1 | .... | +--------+-----------+------+ | 1 | .... | .... | +--------+-----------+------+ | 1 | val1 | .... | +--------+-----------+------+ | 2 | val3 | .... | +--------+-----------+------+ | 2 | .... | .... | +--------+-----------+------+ | 2 | val3 | .... | +--------+-----------+------+ | 3 | val5 | .... | +--------+-----------+------+ | 3 | .... | .... | +--------+-----------+------+ | 3 | val5 | .... | +--------+-----------+------+ | 4 | val2 | .... | +--------+-----------+------+ | 4 | .... | .... | +--------+-----------+------+ | 4 | val2 | .... | +--------+-----------+------+ | 5 | val4 | .... | +--------+-----------+------+ | 5 | .... | .... | +--------+-----------+------+ | 5 | val4 | .... | +--------+-----------+------+

Here is the select statement:

SELECT SelectSetOne.rank, TableTwo.ValColumn, TableTwo.* FROM (SELECT rank=count(*), ValColumn FROM TableOne) as SelectSetOne, INNER JOIN TableTwo ON SelectSetOne.ValColumn = TableTwo.ValColumn ORDER BY SelectSetOne.rank;

Questions connexes