我有一个名为tasks的表,如下所示。表中的字段是雇员、任务和日期。
输入表:
Date: employees Task
2016-12-03 John Paint the walls pink
2016-12-03 Sam Play hockey on linoleum
2016-12-03 John the golden fish in a bucket
2016-12-03 Sam Create a rink on the porch
2016-12-03 Nathan Glue the front door
2016-12-03 Nathan Paint the walls pink
2016-12-08 Sam Melt the doorknob
2016-12-08 Dewey Wrap the cat in toilet paper
2016-12-08 John Give bubble gum to the dog
2016-12-08 Dewey Order 20 pizzas
2016-12-09 John Create a rink on the porch
2016-12-09 Nathan Eat all the candies
.......
...... so on
对于输出,我想选择一个列表,该列表首先根据日期排序,然后根据员工的特定顺序排序(john come first,nathan second,sam third,dewey fourth)。
Output:
Date: employees Task
2016-12-03 John Paint the walls pink
2016-12-03 John the golden fish in a bucket
2016-12-03 sam Play hockey on linoleum
2016-12-03 Sam Create a rink on the porch
2016-12-03 Nathan Glue the front door
..
..
.... so on.
我试着用order by。如何按上述特定顺序进行排序?或者我需要知道其他的概念吗?任何帮助都将不胜感激。
2条答案
按热度按时间qq24tv8q1#
你可以用
FIELD()
功能。该函数的详细信息如下:返回str1,str2,str3。。。列表。如果找不到str,则返回0。
现在
FIELD(employees, 'John', 'Nathan', 'Sam', 'Dewey')
如果employees
不在('John', 'Nathan', 'Sam', 'Dewey')
.所以,如果我们使用
ORDER BY FIELD(employees, 'John', 'Nathan', 'Sam', 'Dewey')
只有其他不匹配的行才会出现在顶部。所以,我们可以用If()
函数为其他不匹配行返回1,为匹配行返回0。现在,我们可以通过
FIELD(employees, 'John', 'Nathan', 'Sam', 'Dewey')
. 这将确保匹配的id按照中指定的顺序首先出现Field()
功能。尝试:
nafvub8i2#
你可以用
FIELD()
功能:唯一的警告是如果你还有其他员工。以上逻辑将把它们放在首位。
所以,你可能会想要:
我用的是
COALESCE(NULLIF())
组合以避免重复员工列表。另一种选择是反向列表: