Объединить Выбрать оператор и заказать динамически? - PullRequest
1 голос
/ 31 марта 2009
  1. У меня есть оператор выбора, который вернет мне 5 значений: val1, val3, val5, val2, val4
  2. У меня есть еще один оператор select, который собирается вернуть набор записей с одним из столбцов, имеющих значения из вышеуказанного набора (val1 до val5)

Можно ли отсортировать второй оператор выбора по результату первого оператора выбора?

Я имею в виду порядка val1, val3, val5, val2, val4.

Это означает, что если первое утверждение меняет порядок, я должен изменить порядок.

Пожалуйста, дайте мне знать, если это возможно.

Ответы [ 5 ]

1 голос
/ 31 марта 2009

Вы не опубликовали свои фактические запросы, поэтому я могу предположить, что они проще, чем они есть, но если ваше первое утверждение было:

select val from valuetable order by someothercolumn

тогда ваш второй запрос может быть

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

Другими словами, вы можете скопировать порядок из вашего первого утверждения во второе.

0 голосов
/ 10 апреля 2009

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;
0 голосов
/ 09 апреля 2009

Я не уверен, что полностью понимаю вопрос, но попробуйте это. Я полагаю, ваши таблицы выглядят так?

Table1:
myfield1
val1
val2
val2

Table2:
myField2  myDataField
val1      test1
val2      test2
val3      test3

тогда ваш SQL-запрос будет выглядеть так

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

НТН

0 голосов
/ 02 апреля 2009

Предположительно, первое утверждение имеет некоторый порядок (если это не так, порядок значений "val" будет произвольным, и вы не будете заботиться о них.

Итак, возьмите второе утверждение (которое возвращает данные) и оставьте внешнее по отношению к первому (которое возвращает упорядоченные "val") в vals, и упорядочите по тому порядку, который есть у первого оператора.

0 голосов
/ 31 марта 2009

Я совсем не уверен, что понимаю ваш вопрос, но я сделаю снимок.

  • Дополнить первый запрос номером строки (IIRC, MsSQL server 2005 имеет функцию ROW_NUMBER ())
  • Присоединиться к val # и отсортировать по связанному номеру строки
  • Убрать номер строки из результата
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...