所以我有两个专栏(公司,类型)
Company Type Bell Mobile Rogers Mobile Fido Mobile Bell Mobile Bell Home Fido Home Rogers Home Bell Home Bell Home Rogers Home Fido Home Bell Mobile Bell Mobile Fido Mobile Rogers Home Bell Home Rogers Home
我希望它看起来像
Bell Home Bell Home Bell Home Bell Home Bell Mobile Bell Mobile Bell Mobile Bell Mobile Fido Mobile Fido Mobile Fido Home Fido Home Rogers Home Rogers Home Rogers Home Rogers Home Rogers Mobile
第一列只是按升序排序。第二列是asc / desc的混合物。注意第一组公司(贝尔)如何排序为asc,然后当你到达第二组公司(Fido)时,它被排序为desc。然后当你到达第三组时它会回到asc等等......
目前,我没有关于如何对此类型进行排序的线索。但我认为我需要创建两个新列:( CompanySortOrder,每个公司的值为1~3,然后是类型的1,2)请记住这是示例,所以硬编码不可能,因为我期望更多的公司还有更多类型我甚至可能需要以相同的方式或正常的排序方式对第三列进行排序。
编辑:我还想补充说,排序第二列,Type,也可以从Desc开始,然后是Asc等等
答案 0 :(得分:0)
如果您正在使用MS SQL Server或任何其他支持DENSE_RANK()
等分区功能的dbms,您可以通过将数据划分为基于Company的组来实现此目的,并根据组%2 =应用不同的顺序0(即,如果它是偶数或奇数)。
SELECT * FROM YourTable
ORDER BY Company ASC,
CASE (DENSE_RANK() OVER (ORDER BY COMPANY) % 2) WHEN 1 THEN Type END ASC,
CASE (DENSE_RANK() OVER (ORDER BY COMPANY) % 2) WHEN 0 THEN Type END DESC
可能还有其他更有效的方法可以实现这一目标,但首先要考虑的是这一点。
使用第三列可能看起来像这样(为了清楚起见,我将查询包装在CTE中):
;WITH sorted AS (
SELECT *,
Sort1 = DENSE_RANK() OVER (ORDER BY COMPANY) % 2,
Sort2 = DENSE_RANK() OVER (ORDER BY COMPANY, Type) % 2
FROM YourTable
)
SELECT * FROM sorted
ORDER BY Company ASC,
CASE Sort1 WHEN 1 THEN Type END ASC,
CASE Sort1 WHEN 0 THEN Type END DESC,
CASE Sort2 WHEN 0 THEN Type END ASC,
CASE Sort2 WHEN 1 THEN Type END DESC