我们有一个旧系统,它会拆分长串文本并将它们存储在一个表中,如下所示:
The compu
ter is no
t working
以及每行的其他一些数据。
我从表格中选择一些数据如下:
select a.Field1, a.Field2, a.Field3
from TableA a
很好地得到了:
Field1 Field2 Field3
The compu 2 3
ter is no 2 3
t working 2 3
但是,如果我在select语句中添加一个特定列Field4
,那么订单就会被搞砸:
select a.Field1, a.Field2, a.Field3, a.Field4
from TableA a
Field1 Field2 Field3 Field4
ter is no 2 3 1
The compu 2 3 1
t working 2 3 1
如果我在select语句中使用星号,它可以正常工作:
select *
from TableA a
Field1 Field2 Field3 Field4 Field5
ter is no 2 3 1 5
The compu 2 3 1 5
t working 2 3 1 5
所以,我不能真正使用任何order by
语句,因为没有什么可以订购的。
有人可以提出任何建议,说明为什么我在查询中没有Field4
的情况下获得正确的订单以及错误的顺序吗?
答案 0 :(得分:3)
如果您不使用ORDER BY
子句,则无法保证返回行的顺序,并且根据SQL Server为您排序行是一种灾难。
不使用Order By子句可能影响返回行的顺序的一件事是在表上定义的索引。
但同样没有保证,如果订单很重要,你应该总是在你的select语句中使用Order by子句。
答案 1 :(得分:1)
尝试对其执行功能:
select a.Field1, a.Field2, a.Field3, isnull(a.Field4,'') AS [Field4]
from TableA a
然后拍摄你的数据库架构师。
答案 2 :(得分:0)
您可能可以使用子查询。
select result.field1
, result.field2
, result.field3
, a.field4
from (
select a.id
, a.field1
, a.field2
, a.field3
from TableA a
) result
join TableA a
on a.id = result.id
否则,请确保您有一个Id
列,可以通过该列来订购结果。
TableA
-----------------------------------------------
Id | field1 | field2 | field3 | field4
-----------------------------------------------
甚至是一个符合您目的的排序顺序列。
TableA
-------------------------------------------------------
field1 | field2 | field3 | field4 | sortOrder
-------------------------------------------------------
This st | '' | '' | '' | 1
-------------------------------------------------------
really | '' | '' | '' | 3
-------------------------------------------------------
g | '' | '' | '' | 5
-------------------------------------------------------
ring is | '' | '' | '' | 2
-------------------------------------------------------
too lon | '' | '' | '' | 4
您可以按照之前的说明订购。
select a.field1
, a.field2
, a.field3
, a.field4
from TableA a
order by sortOrder asc
输出:
field1 | field2 | field3 | field4
-----------------------------------------
This st | '' | '' | ''
-----------------------------------------
ring is | '' | '' | ''
-----------------------------------------
really | '' | '' | ''
-----------------------------------------
too lon | '' | '' | ''
-----------------------------------------
g | '' | '' | ''