【问题标题】:Select results and order by in list items选择结果并在列表项中排序
【发布时间】:2016-07-05 16:24:55
【问题描述】:

我想通过在 where 子句中列出的顺序来显示我的 MySQL 查询的结果。目前,结果未按我列表中的数字顺序列出。

这是我的声明

SELECT *
FROM subscription
WHERE phone in 
(
    '255769016082',
    '255742594724',
    '255753299742',
    '255759502732',
    '255753839708'
)

【问题讨论】:

  • 所以?您的选择中的 order by 语句在哪里?你想如何订购它们?请添加一些信息。
  • 嗨马克西姆,我没有下订单,因为我不知道我的查询的正确语句。我如何尝试按 (Column_Name) Desc 或 Asc 排序,并且成功执行。但我关心的是按我在sql语句中列出的顺序排列结果。

标签: sql-server-2008


【解决方案1】:

由于您希望以非顺序顺序对多个值进行排序,即它们不是按数字顺序排列的,也不会按照 VARCHAR 的顺序正确排序,因此您需要对它们应用数值。以下是您可以这样做的方法。

if object_id('tempdb..#temp') is not null drop table #temp

create table #temp (phone varchar(20))

insert into #temp (phone) values
('255769016082'),
('255742594724'),
('255753299742'),
('255759502732'),
('255753839708'),
('257538312333')

SELECT * 
FROM #temp
WHERE phone in 
(
    '255769016082',
    '255742594724',
    '255753299742',
    '255759502732',
    '255753839708'
)
ORDER BY
CASE
    WHEN phone = '255769016082' THEN 1
    WHEN phone = '255742594724' THEN 2
    WHEN phone = '255753299742' THEN 3
    WHEN phone = '255759502732' THEN 4
    WHEN phone = '255753839708' THEN 5
END

以后,如果您要对非数字字段进行排序,您需要熟悉 SQL Server 是如何处理这个问题的。

考虑一下

if object_id('tempdb..#char') is not null drop table #char

create table #char(stringField varchar(6))

insert into #char (stringField) values
('a'),
('A'),
('b'),
('B'),
('AB'),
('aB'),
('ab'),
('Ab'),
('ba'),
('Ba'),
('bA'),
('BA')

select * from #char order by stringField asc
select * from #char order by stringField desc

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-06-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-09-17
    • 2016-12-06
    • 2014-11-12
    相关资源
    最近更新 更多