如何按列排序而不是在select子句中?

时间:2014-02-26 18:23:39

标签: sql sql-server sql-server-2008

是否有一种方法可以解决不能按SELECT子句中的列排序的问题?我使用datename来表示月份和年份,但我需要按实际日期排序,而不是按字母顺序排序。

select   datename(month, dbo.ITR.ITR_TransDate) as MonthDt, 
        DATENAME(year, dbo.itr.ITR_TransDate) as YearDt, COUNT(distinct dbo.ITR.ITR_Reason) AS WKCount, COUNT(dbo.itr.itr_reason) AS LineCt 
        from dbo.ITR
where   (ITR_EmployeeID IN (N'robra', N'lewer', N'petam', N'whike', N'mclch', N'ricju')) AND    (dbo.ITR.ITR_TransDate >= '1/1/13' AND dbo.itr.ITR_TransDate <= '1/31/14') AND 
    (dbo.itr.ITR_Reason LIKE 'WO%' OR dbo.itr.ITR_Reason LIKE 'RW%')
group by DATENAME(year, dbo.itr.ITR_TransDate), datename(month, dbo.ITR.ITR_TransDate), MONTH(dbo.itr.itr_transdate)
order by dbo.ITR.ITR_TransDate

我所拥有的订单是失败的b / c它不在group by或聚合中。我无法将其添加到b / c中,它会返回许多日期。

2 个答案:

答案 0 :(得分:3)

您可以在order by

中使用聚合函数
order by min(dbo.ITR.ITR_TransDate)

这适用于您的情况。

答案 1 :(得分:2)

试试这个

select   datename(month, dbo.ITR.ITR_TransDate) as MonthDt, 
    DATENAME(year, dbo.itr.ITR_TransDate) as YearDt, COUNT(distinct dbo.ITR.ITR_Reason) AS WKCount, COUNT(dbo.itr.itr_reason) AS LineCt 
    from dbo.ITR
where   (ITR_EmployeeID IN (N'robra', N'lewer', N'petam', N'whike', N'mclch', N'ricju')) AND    (dbo.ITR.ITR_TransDate >= '1/1/13' AND dbo.itr.ITR_TransDate <= '1/31/14') AND 
(dbo.itr.ITR_Reason LIKE 'WO%' OR dbo.itr.ITR_Reason LIKE 'RW%')
group by DATENAME(year, dbo.itr.ITR_TransDate), datename(month, dbo.ITR.ITR_TransDate), MONTH(dbo.itr.itr_transdate)
order by DATENAME(year, dbo.itr.ITR_TransDate), MONTH(dbo.itr.itr_transdate)