2012-04-25 63 views
2

我需要SQL(MSSQL)方面的帮助,在这里我按多个布尔类型进行排序,以便对结果进行分组,但也需要按每个类型分组中的日期字段进行排序。SQL Sorting in Groupings

下面的SQL看似工作正常:

Select * from staff ORDER BY admin DESC, hr DESC, sales DESC, it DESC, updated DESC 

诀窍是,一些记录已超过1种类型选择,然后输出得到弄糟。我只需要在一个分组中显示工作人员,但他们应该按每个分组内的更新的DESC排序。

这是输出我得到:

Name updated admin hr  sales it 
------------------------------------------- 
fred 2012/04/01 true true 
bill 2011/10/01 true true 
joe 2012/04/01 true 
sam 2012/03/01 true 
jo 2012/02/01 true 
beth 2012/03/01  true 
mary 2012/02/01  true 
harry 2011/02/01    true true 
gary 2012/04/01    true 
bruce 2012/04/01      true 

这是输出,我需要

Name updated admin hr  sales it 
------------------------------------------- 
fred 2012/04/01 true true 
joe 2012/04/01 true 
sam 2012/03/01 true 
jo 2012/02/01 true 
bill 2011/10/01 true true 
beth 2012/03/01  true 
mary 2012/02/01  true 
gary 2012/04/01    true 
harry 2011/02/01    true true 
bruce 2012/04/01      true 

希望是有道理的。

+0

何时两行属于同一组?如果它们属于同一组,如果它们对于所有列“admin”,“hr”,“sales”和“it”具有相同的值,那么我不明白为什么第一个结果是错误的 - “fred”和“账单“是他们小组中唯一的两名成员,他们正确地排序... – MiMo 2012-04-25 11:15:32

+0

对不起,但我不明白你想要使用的逻辑,为了乔,山姆和乔出现在fred和账单在输出中。你能进一步解释吗? – 2012-04-25 11:15:41

+0

@MiMo,fred,bill,joe,sam和jo都是管理员组的成员,应该对其进行排序更新DESC,但它们不是,因为fred和bill也在hr组中。安东尼的答案解决了这个问题。 – Schliden 2012-04-25 15:47:41

回答

2

您可以在order by子句中使用大小写表达式进行条件排序。

SELECT * 
FROM staff 
ORDER BY 
    admin DESC, 
    CASE admin WHEN 'true' THEN updated END DESC, 
    hr DESC, 
    CASE hr WHEN 'true' THEN updated END DESC, 
    sales DESC, 
    CASE sales WHEN 'true' THEN updated END DESC, 
    it DESC, 
    updated DESC 
+0

太棒了。正是我需要的。谢谢 – Schliden 2012-04-25 15:32:30