在SQL Server中按月显示数据

时间:2015-01-18 14:42:14

标签: sql-server sql-server-2008 sql-server-2008-r2 sql-server-2012

我对SQL Server的问题很小。

我有一个包含这样的样本数据的表:

id | month  | stat   | count
---------------------------------
1  |     1  | admit  |  7
2  |     8  | admit  | 47
1  |     7  | admit  | 28
2  |     9  | admit  | 11
3  |    12  | dischr |  4
4  |    10  | openc  |  5
1  |    11  | admit  |  1
2  |     6  | admit  |  5
2  |     4  | admit  |  8
1  |     3  | dischr | 10
2  |     2  | admit  | 30
3  |     5  | dischr | 20
1  |     8  | admit  | 13
3  |     8  | dischr |  1
4  |     9  | admit  | 30
2  |    10  | admit  | 20
3  |    10  | deschr | 20

基于这个,当月= 1然后是1月和当月= 2然后2月一直到12,基于这个条件,我得到如下的输出。

Month   |id |Admit  |Dischr |OpenC
August  |1  |13 |NULL   |NULL
January |1  |7  |NULL   |NULL
July    |1  |28 |NULL   |NULL
March   |1  |NULL   |10 |NULL
November|1  |1  |NULL   |NULL
April   |2  |8  |NULL   |NULL
August  |2  |47 |NULL   |NULL
February|2  |30 |NULL   |NULL
June    |2  |5  |NULL   |NULL
October 2   |20 |NULL   |NULL
September|2 |11 |NULL   |NULL
August  |3  |NULL   |1  |NULL
December|3  |NULL   |4  |NULL
May     |3  |NULL   |20 |NULL
October |3  |NULL   |NULL   |NULL
October |4  |NULL   |NULL   |5
September|4 |30 |NULL   |NULL

但我希望输出像月份正确的顺序和输出如下所示

Month   |id |Admit  |Dischr |OpenC
January |1  |7  |NULL   |NULL
February|2  |30 |NULL   |NULL
March   |1  |NULL   |10 |NULL
April   |2  |8  |NULL   |NULL
May     |3  |NULL   |20 |NULL
June    |2  |5  |NULL   |NULL
July    |1  |28 |NULL   |NULL
August  |1  |13 |NULL   |NULL
August  |2  |47 |NULL   |NULL
August  |3  |NULL   |1  |NULL
September|2 |11 |NULL   |NULL
September|4 |30 |NULL   |NULL
October |2  |20 |NULL   |NULL
October |3  |NULL   |NULL   |NULL
October |4  |NULL   |NULL   |5
November|1  |1  |NULL   |NULL
December|3  |NULL   |4  |NULL

请告诉我如何在SQL Server中解决此问题。

2 个答案:

答案 0 :(得分:3)

您需要convert monthdateorder byID

一起使用
SELECT [Month],
        id,
        Admit,
        Dischr,
        OpenC
FROM   yourTable
ORDER  BY Cast([Month] + '01 2010' AS DATE),Id 

order by DATEPART(MM,[Month]+ ' 01 2010'),Id

注意: '1 2010'广告素材只是convert month varchar列到date的静态值

答案 1 :(得分:0)

在查询中添加order by子句,以确保根据您的要求订购数据。像这样的东西

SELECT ....
FROM yourTable
ORDER BY Month, Id
相关问题