2013-12-16 38 views
0

不能命令数据。当我运行下面的SQL我得到的日期格式设置的方式,我需要它:SQL Server 2008中 - 使用格式化的日期

SELECT 
    SUBSTRING(CONVERT(VARCHAR(8), convert(datetime, [Tran_Date], 103), 3), 4, 5) AS 'Date', 
    SUM([TRAN_AMOUNT]) as 'Amount' 
FROM [TRANSACTIONS] 
group by SUBSTRING(CONVERT(VARCHAR(8), convert(datetime, [Tran_Date], 103), 3), 4, 5) 
order by SUBSTRING(CONVERT(VARCHAR(8), convert(datetime, [Tran_Date], 103), 3), 4, 5) 

但结果是不正确的01/14是前12/13因为不得不转换为字符串,以获得MM/YY格式。

01/14 4159.52 
12/13 24231.60 

当我由公司或集团更改顺序,这样的数据是一个日期数据类型我得到的错误:

TRANSACTIONS.Tran_Date" is invalid in the ORDER BY clause because it is not contained in either an aggregate function or the GROUP BY clause

我敢肯定,这必须是一个巨大的问题,但我可以” Ť似乎发现了什么。有没有办法解决它?

+1

怎么样,如果你继续GROUP BY,因为它是,并且只能通过以'订单变更ORDER BY [Tran_Date]'? –

+0

然后我得到TRANSACTIONS.Tran_Date“在ORDER BY子句中无效,因为它不包含在聚合函数或GROUP BY子句中错误 –

回答

2

这应该这样做:

SELECT 
    SUBSTRING(CONVERT(VARCHAR(8), convert(datetime, [Tran_Date], 103), 3), 4, 5) AS 'Date', 
    SUM([TRAN_AMOUNT]) as 'Amount' 
FROM [TRANSACTIONS] 
group by CONVERT(VARCHAR(6), convert(datetime, [Tran_Date], 103),112), 
     SUBSTRING(CONVERT(VARCHAR(8), 
     convert(datetime, [Tran_Date], 103), 3), 4, 5) 
order by CONVERT(VARCHAR(6), convert(datetime, [Tran_Date], 103),112) 
+0

对不起,Lamak,没有用,仍然尝试按字符串和组通过在选择的MM/YY格式不对基团。该数据是用于在图表上的用途。 –

+0

因此,在总结,我需要格式化日期作为MM/YY(字符串),但订购日期作为datetime数据类型,因此,月份和年份会按照您的预期行进 –

+0

@ DennisFinke而这正是查询应该做的事情,您确定您使用的查询与我的答案完全相同? – Lamak