2009-03-30 17 views
1
  1. 私はval1と、val3は、val5、VAL2、val4
  2. として、私はからの値を持つ列のいずれかでレコードセットを返すために起こっている別のselect文を持っている私に5つの値が返されますselect文を持っています上記のセット(val1からval5)

最初のselect文の結果で2番目のselect文をソートすることはできますか?Merge Select文と順序を動的に選択しますか?

私は、val1、val3、val5、val2、val4の順であることを意味します。

これは、最初のステートメントが注文を元に戻す場合は、注文を取り消す必要があることを意味します。

可能であれば教えてください。

+0

あなたが使用しているテーブルを作成する方法を示すスクリプト(サンプルのバージョンすることができます)およびサンプルを投稿することができますそれぞれのステートメントを選択しますか?そうすれば、より良い答えが得られます。 –

答えて

1

からあなたは、実際のクエリを投稿していないので、私は、彼らがしているよりも簡単ですと仮定することができるが、あなたの最初の文であった場合:

select val from valuetable order by someothercolumn 

は、あなたの2番目のクエリは、言い換えれば

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

可能性があり、あなたは、第二に、あなたの最初の文から順序をコピーすることができます。

0

私はあなたの質問を理解していることはまったくわかりませんが、私はそれを撃つでしょう。

  • は行番号をヴァル位に参加し、そしてソート関連する行番号
  • ストリップによって
  • (IIRC、のMSSQLサーバ2005 ROW_NUMBER()機能を有している)は、行番号の最初のクエリを増補します結果
0

おそらく、最初の文はそれがなかった場合は、「ヴァル」sのオーダーは任意となり、そしてあなたがそれらを気にwould'nt(それにいくつかの順序を持​​っている。だから、

を取ります(データを返す)2番目のステートメントを返し、valの最初のステートメント(orderされた「val」を返す)に外側を置き、最初のステートメントの注文が何であれ順に並べ替えます。

0

あなたのテーブルはこのように見えますか?

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 

ようになり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;

関連する問題