假设我有一个表Employees
,其中有列id
,name
,salary
和manager_id
还有另一个具有列fields
的表field
,该列可以是Employees
表中的任何字段。
如何按fields
表中的行对员工进行排序?
例如:fields
包含值'salary', 'manager_id'
时,将按salary
然后按manager_id
对员工进行排序。
我尝试了类似的方法,但是没有用:
SELECT * FROM employees ORDER BY (SELECT field FROM fields)
编辑:最初的问题是我实现目标的一个简化示例。 我希望员工将按其上级经理ID排序,然后按第二个上级经理ID排序,最后按他们的上级经理ID排序。
给出雇员(id,姓名,薪水,manager_id):
1个Alex 1000 NULL
2 Mor 2000 1
3 John 3000 NULL
4克里斯4000 1
5迈克尔5000 4
6 Matt 6000 2
查询结果为:
1个Alex 1000 NULL
2 Mor 2000 1
6 Matt 6000 2
4克里斯4000 1
5迈克尔5000 4
3约翰3000 NULL
答案 0 :(得分:0)
答案 1 :(得分:0)
如果您可以告诉我们该错误给您的信息,则可能会帮助我们帮助您
我认为'
符号是造成问题的原因,因此就好像您在写:
SELECT * FROM employees ORDER BY 'salary', 'parent_id'
尝试使用Replace()
答案 2 :(得分:0)
有一种方法可以实现这一目标。但我强烈建议您更改设计。
为此,您必须在SEQ
表中添加Fields
字段,以确定Fields
表中字段的顺序。第一个字段具有SEQ 1,第二个字段具有……
SELECT
*
FROM
Employees E
ORDER BY
CASE
(SELECT
F.NAME
FROM
Fields F ORDER BY F.SEQ LIMIT 1)
WHEN 'salary' THEN E.salary
WHEN 'parent_id' THEN E.parent_id
ELSE 0 END
,
CASE
(SELECT
F.NAME
FROM
Fields F ORDER BY F.SEQ LIMIT 1 OFFSET 1)
WHEN 'salary' THEN E.salary
WHEN 'parent_id' THEN E.parent_id
ELSE 0 END
sql小提琴上的示例进行演示。有两个表FieldsA
和FieldsB
使测试更加容易,而无需从表字段和新记录中删除以查看其是否正常工作。
http://sqlfiddle.com/#!15/64df6e/2/0