2016-08-05 60 views
0

我試圖輸出值基於一個名爲DisplayOrder列包含了像值:如何在另一個表中按位置排序小數列?

1.1 
1.2 
2.3 
2.1 
2.2 
5.2 
5.3 
5.1 

我需要輸出基於它的這些數字是在具有值不是爲了像這樣的另一個表中的位置:

2 
5 
1 

,我想輸出的在第二表中的位置順序在頂部表中的值,但在十進制值的順序如下所示:

2.1 
2.2 
2.3 
5.1 
5.2 
5.3 
1.1 
1.2 

到目前爲止,我試圖插入到一個臨時表,其中數字的所述第一部分是在該順序​​:

INSERT INTO #Temp 
SELECT DisplayOrder 
FROM Questions 
WHERE DisplayOrder LIKE @Search 

上面的代碼循環表2其中分配各個值與+到@Search 。%以小數點開始獲取所有值。

我看了他們提到,插入數據時它的順序是基本喪失和選擇輸出時,應獲得一些其他職位。

+0

由於表沒有內在的秩序,你是什麼意思「另一個表的價值不按順序」 - 你有一列*定義*要應用的順序? (提示:你需要一個) –

+0

@Damien_The_Unbeliever我有一個通過循環逗號分隔的字符串並插入分隔值創建的表。這是第二個表格的表示。例如。 '2,5,1'變成表2,它決定了表1的順序。 –

+0

表沒有*固有順序。除非您在插入值時應用附加*編號*,否則您的表格包含3行。無論什麼時候查詢,它都沒有定義什麼* order *它將返回那些行,除非你應用了'ORDER BY'子句。你會注意到這兩個提供的答案都假設這樣的編號已經發生。 –

回答

0
Declare @T1 table (nval money) 
Insert into @T1 values 
(1.1), 
(1.2), 
(2.3), 
(2.1), 
(2.2), 
(5.2), 
(5.3), 
(5.1) 

Declare @T2 table (RowNr int,nval money) -- Make RowNr and Identity(int) 
Insert into @T2 values 
(1,2),(2,5),(3,1) 

Select A.* 
From @T1 A 
Join @T2 B on floor(a.nval)=B.nval 
Order By B.RowNr,A.nval 

返回

nval 
2.10 
2.20 
2.30 
5.10 
5.20 
5.30 
1.10 
1.20 
0

不幸的是你是不是顯示你的表格。比方說,他們是這樣的:

表數據

 
value 
1.1 
1.2 
2.3 
2.1 
... 

表datasort

 
intvalue displayorder 
2   1 
5   2 
1   3 
... 

通過displayorder第一和值後加入表和順序:

select 
from data 
join datasort on datasort.intvalue = trunc(data.value) 
order by datasort.displayorder, data.value; 
相關問題