如何在另一个表中按位置排序十进制列?

时间:2016-08-05 09:30:33

标签: sql sql-server-2012

我尝试根据名为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 +。%以获得带小数开头的所有值。

我读了一些其他帖子,他们提到当插入数据时,它的顺序基本上会丢失,应该在选择输出时获得。

2 个答案:

答案 0 :(得分: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

答案 1 :(得分:0)

不幸的是,你没有展示你的桌子。让我们说它们看起来像这样:

表格数据

value
1.1
1.2
2.3
2.1
...

表格数据库

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;