繁体   English   中英

sql server order by子句

[英]sql server order by clause

以下是我的查询:

SELECT * FROM [TEMPDB].[dbo].[##TEMPMSICHARTFORMATTED]

它给我以下结果:

查询结果

问题是,如果我正在order by MonthCycle进行order by MonthCycle那么由于它是一个字符串,因此它使用月份的第一个字母进行排序,但是我希望order by月份为基础的order byJan应该是第一,然后是Feb

有一个返回月数的case表达式:

SELECT * FROM [TEMPDB].[dbo].[##TEMPMSICHARTFORMATTED]
order by case left(monthcycle,3) when 'Jan' then 1
                                 when 'Feb' then 2
                                 ...
         end

问题没有指定报告是否将跨度数年,但是如果是这样,我将使用类似以下的内容:

ORDER BY CONVERT(DATETIME, '1 ' + REPLACE(monthCycle, '''', ' '))
SELECT * FROM [TEMPDB].[dbo].[##TEMPMSICHARTFORMATTED]
ORDER BY CASE 
  WHEN LEFT(MONTHCYCLE,3) = 'Jan' then 1
  WHEN LEFT(MONTHCYCLE,3) = 'Feb' then 2
  WHEN LEFT(MONTHCYCLE,3) = 'Mar' then 3
  WHEN LEFT(MONTHCYCLE,3) = 'Apr' then 4
  WHEN LEFT(MONTHCYCLE,3) = 'May' then 5
  WHEN LEFT(MONTHCYCLE,3) = 'Jun' then 6
  WHEN LEFT(MONTHCYCLE,3) = 'Jul' then 7
  WHEN LEFT(MONTHCYCLE,3) = 'Aug' then 8
  WHEN LEFT(MONTHCYCLE,3) = 'Sep' then 9
  WHEN LEFT(MONTHCYCLE,3) = 'Oct' then 10
  WHEN LEFT(MONTHCYCLE,3) = 'Nov' then 11
  WHEN LEFT(MONTHCYCLE,3) = 'Dec' then 12
  ELSE 0 END;

您可以使用DATEPART

像这样

SELECT * FROM [TEMPDB].[dbo].[##TEMPMSICHARTFORMATTED] Order by DATEPART(MM,'01'+MONTHCYCLE)

要么

SELECT * FROM [TEMPDB].[dbo].[##TEMPMSICHARTFORMATTED] Order by DATEPART(MM,'01'+Replace(MONTHCYCLE,'''',''))

另一种方式:)

DECLARE @d as date = '2016-01-01'
;WITH months AS (
SELECT  1 as [Month],
        LEFT(DATENAME(Month,@d),3) as MName
UNION ALL
SELECT  [Month] + 1,
        LEFT(DATENAME(Month,DATEADD(Month,[Month],@d)) ,3) 
FROM months 
WHERE [Month] + 1 <= 12
)

SELECT c.*
FROM [TEMPDB].[dbo].[##TEMPMSICHARTFORMATTED] c
LEFT JOIN months m 
    ON c.MONTHCYCLE LIKE m.MName +'%'
ORDER BY RIGHT(c.MONTHCYCLE,2) ASC, m.[Month] ASC

输出:

MONTHCYCLE TARGET Corp Stnd   Local       OF Stnd
---------- ------ ----------- ----------- -----------
Jan'16            2           1           1
Feb'16            1           1           1
Mar'16            2           3           1
Apr'16            4           3           NULL

(4 row(s) affected)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM