2011-04-05 94 views
0

看到我运行下面的查询排序VARCHAR类型是不同的,那么我在Excel中

CREATE TABLE #Temp 
(
    Data VARCHAR(100) 
) 

INSERT INTO #Temp VALUES ('241.110') 
INSERT INTO #Temp VALUES ('1340.306') 

SELECT * FROM #Temp ORDER BY Data asc 

结果是

1340.306
241.110

当我在排序相同的数据以最小到最大订单为优,它有

241.110
1340.306

在SQL Server中,我需要相同的顺序在Excel中。我究竟做错了什么?

回答

0

如果您在一列中有混合的数字和文本,您可以使用它对数字的数值进行排序。

CREATE TABLE #Temp 
(
    Data varchar(100) 
) 

INSERT INTO #Temp VALUES ('241.110') 
INSERT INTO #Temp VALUES ('1340.306') 
INSERT INTO #Temp VALUES ('b') 
INSERT INTO #Temp VALUES ('aa') 
INSERT INTO #Temp VALUES ('241.2') 

SELECT * 
FROM #Temp 
ORDER BY 
    case isnumeric(Data) when 0 then Data end asc, 
    case isnumeric(Data) when 1 then cast(Data as numeric(10,3)) end asc 

结果:

Data 
---------- 
241.110 
241.2 
1340.306 
aa 
b 

编辑1第二列被处理的方式相同。

SELECT * 
FROM #Temp 
ORDER BY 
    case isnumeric(Data) when 0 then Data end asc, 
    case isnumeric(Data) when 1 then cast(Data as numeric(10,3))end asc, 
    case isnumeric(Data2) when 0 then Data2 end asc, 
    case isnumeric(Data2) when 1 then cast(Data2 as numeric(10,3))end asc 
+0

嗯,这是暗示,我不知道你可以按顺序做CASE。如果与案例结合使用,我可以按顺序排列多个列,例如,如果我有Data1,Data2列,是否可以以相同的方式检查两者? – 2011-04-05 21:07:20

+0

@palm - 不知道我是否理解你想要的,但你可以有多个列/语句。在我的答案中,有两个句子依次用逗号分隔。第一个返回一个字符串或null,第二个返回一个数字或null。您当然可以在order by子句中添加更多的语句。 – 2011-04-05 21:12:27

+0

对于我的无知感到遗憾,但我们假设我有两列Data1和Data2,如果我想通过CASE检查执行ORDER BY Data1,Data2,您可以通过示例来演示。我正在尝试它,但得到语法错误 – 2011-04-05 21:18:09

0

sql-server中的排序按字母顺序排列,'1'排在'2'之前。

为了得到与excel相同的排序,我建议您使用数字字段而不是VARCHAR。

相关问题