我在SQL表中有一个列,我正在尝试按顺序执行。数据需要在desc中显示,因此它最近显示的是最近几年。
Sample Data Expect Output
----------- -------------
older 2013
2012 2012
2013 2011
2011 older
使用这种特殊方法,我只能访问Order by
和WHERE
子句,而不是完整的SQL。
这限制了我能够将数据拉出2组并加入。
我也无法将older
字段操作为类似999order
的内容,并稍后删除999
。
有没有办法订购,这会给我我想要的东西?
答案 0 :(得分:4)
您可以在CASE
子句中使用ORDER BY
语句:
WITH tbl AS(
SELECT 'older' AS date_col UNION ALL
SELECT '2012' UNION ALL
SELECT '2013' UNION ALL
SELECT '2011'
)
SELECT *
FROM tbl
ORDER BY
CASE
WHEN date_col NOT LIKE '%[^0-9]%' THEN 0
ELSE 1
END,
date_col DESC
NOT LIKE '%[^0-9]%'
表示date_col
由所有数字组成。将0
分配给这些行,因为它们将首先排序。然后按date_col DESC
排序。
<强> RESULT 强>
date_col
--------
2013
2012
2011
older
答案 1 :(得分:0)
一个(脏)技巧是使用bin
函数:对于非数字字符串,它将返回'0'
,因此'older
'将首先出现:
SELECT *
FROM mytable
ORDER BY BIN(year_column)
答案 2 :(得分:0)
你可以试试这个:
SELECT * FROM t5 ORDER BY BIN(samp_data) DESC;
答案 3 :(得分:0)
我们不能使用ISNUMERIC()
函数代替NOT LIKE
DECLARE @test TABLE
(
value varchar(10)
)
INSERT INTO @test
VALUES
('2010'),
('2011'),
('2012'),
('2013'),
('2014'),
('2015'),
('older')
SELECT * From @test
ORDER BY
(CASE WHEN ISNUMERIC(value) = 1 THEN 0 ELSE 1 END),value DESC
答案 4 :(得分:0)
这将首先显示数字行
Select *
From [Table Name]
Order By IsNumeric([Column Name]) DESC, [Column Name] DESC