2011-01-11 88 views
0

下面是工作正常,但我不按月顺序。你能告诉我任何想法吗?如何按月按结果集顺序获取数据?

SELECT SUM(TaxableAmt) [NSV], (UPPER(CONVERT(VARCHAR,LEFT(DATENAME(MM,invoicedate),3)))+'/'+ CONVERT(VARCHAR,RIGHT(DATENAME(YYYY,invoicedate),2))) AS MONTHYEAR 
FROM SALESDATA where (invoicedate >='4-1-2009' and invoicedate <='4-30-2010') 
GROUP BY (UPPER(CONVERT(VARCHAR,LEFT(DATENAME(MM,invoicedate),3)))+'/'+ CONVERT(VARCHAR,RIGHT(DATENAME(YYYY,invoicedate),2))) 

结果集是:

NSV      MONTHYEAR 

45099947.4300001     APR/09 
83295380.4299992     NOV/09 
95838138.2    AUG/09 
74326454.2599992  DEC/09 
94144688.5400001  JUL/09 
60688678.260001 MAR/10 
58451739.9700001   APR/10 
87555926.7200027   FEB/10 
128036311.36   JAN/10 
50949078.1699996  JUN/09 
45232741.8099997  MAY/09 
72846524.389999  OCT/09 

回答

1

你没有问SQL服务器的任何命令,它是免费的在它喜欢的任何顺序返回数据。

这样做(和减少字符串操作一个地方)的一种方法:

select NSV,UPPER(SUBSTRING(DATENAME(month,MonYear),1,3)) + '/' + RIGHT(DATEPART(year,MonYear),2) 
from 
(SELECT SUM(TaxableAmt) [NSV],DATEADD(month,DATEDIFF(month,'20010101',invoicedate),'20010101') as MonYear 
FROM SALESDATA where (invoicedate >='20090401' and invoicedate <='20100430') 
GROUP BY DATEADD(month,DATEDIFF(month,'20010101',invoicedate),'20010101') 
) t 
ORDER BY MonYear