月份开始和结束时的SQL Server数据显示

时间:2015-11-24 15:08:18

标签: sql sql-server

我在SQL Server中有这样的数据:

 MONTH_START | MONTH_END
-------------|-----------
 01-2014     | 01-2014
 02-2014     | 02-2014
 03-2014     | 03-2014
 05-2014     | 05-2014
 08-2014     | 08-2014
 10-2014     | 10-2014
 11-2014     | 11-2014
 12-2014     | 12-2014

如何汇总日期以获得以下内容:

 MONTH_START | MONTH_END
-------------|-----------
 01-2014     | 05-2014
 08-2014     | 08-2014
 10-2014     | 12-2014

最终显示应该是:如果数据中存在一年中的所有12个月,假设年份为2014年,则MONTH_START为01-2014,MONTH_END为12-2014。如果某个月不存在,则应显示如上表。

1 个答案:

答案 0 :(得分:1)

在结果表中,是

<tr>
    <td>09-2014</td>
    <td>12-2014</td>
</tr>

<tr>
    <td>10-2014</td>
    <td>12-2014</td>
</tr>

您可以尝试以下查询来获得结果:

SELECT  
    MONTH_START,
    MONTH_END = (
        SELECT TOP 1
            MONTH_START
        FROM
            MonthStartEnd
        WHERE
            DATEADD(MONTH, 1, CAST(REPLACE(MONTH_START, '-', '-01-') AS DATETIME)) NOT IN (
                SELECT
                    CAST(REPLACE(MONTH_START, '-', '-01-') AS DATETIME)
                FROM 
                    MonthStartEnd ) 
         AND CAST(REPLACE(MONTH_START, '-', '-01-') AS DATETIME) >= CAST(REPLACE(se.MONTH_START, '-', '-01-') AS DATETIME))
FROM 
    MonthStartEnd se
WHERE
    DATEADD(MONTH, -1, CAST(REPLACE(MONTH_START, '-', '-01-') AS DATETIME)) NOT IN (
        SELECT
            CAST(REPLACE(MONTH_START, '-', '-01-') AS DATETIME)
        FROM 
            MonthStartEnd )