---------------------------------
--  Author: liangCK 小梁
---------------------------------
 
--> 生成测试数据: @T
DECLARE @T TABLE (ConText VARCHAR(6),CreateTime DATETIME)
INSERT INTO @T
SELECT '文本一','2008-10-3' UNION ALL
SELECT '文本二','2009-1-13' UNION ALL
SELECT '文本三','2007-9-18' UNION ALL
SELECT '文本四','2009-3-1' UNION ALL
SELECT '文本五','2008-7-15' UNION ALL
SELECT '文本六','2009-10-3'--SQL查询如下:SELECT
    CreateTime,
    ConText
FROM (
    SELECT DISTINCT
        RTRIM(YEAR(CreateTime))+'年' AS CreateTime,
        '' AS ConText,
        0 AS level,
        YEAR(CreateTime) AS flag
    FROM @T
    UNION ALL
    SELECT
        RTRIM(MONTH(CreateTime))+'月',
        ConText,
        1,
        YEAR(CreateTime)
    FROM @T
) AS A
ORDER BY flag DESC,level/*
CreateTime     ConText
-------------- -------
2009年          
1月             文本二
3月             文本四
10月            文本六
2008年          
10月            文本一
7月             文本五
2007年          
9月             文本三(9 行受影响)*/

解决方案 »

  1.   

    ---------------------------------
    --  Author: liangCK 小梁
    ---------------------------------
     
    --> 生成测试数据: @T
    DECLARE @T TABLE (ConText VARCHAR(6),CreateTime DATETIME)
    INSERT INTO @T
    SELECT '文本一','2008-10-3' UNION ALL
    SELECT '文本二','2009-1-13' UNION ALL
    SELECT '文本三','2007-9-18' UNION ALL
    SELECT '文本四','2009-3-1' UNION ALL
    SELECT '文本五','2008-7-15' UNION ALL
    SELECT '文本六','2009-10-3'--SQL查询如下:SELECT
        CreateTime,
        ConText
    FROM (
        SELECT DISTINCT
            RTRIM(YEAR(CreateTime))+'年' AS CreateTime,
            '' AS ConText,
            0 AS level,
            YEAR(CreateTime) AS flag
        FROM @T
        UNION ALL
        SELECT
            RTRIM(MONTH(CreateTime))+'月',
            ConText,
            MONTH(CreateTime),
            YEAR(CreateTime)
        FROM @T
    ) AS A
    ORDER BY flag DESC,level/*
    CreateTime     ConText
    -------------- -------
    2009年          
    1月             文本二
    3月             文本四
    10月            文本六
    2008年          
    7月             文本五
    10月            文本一
    2007年          
    9月             文本三(9 行受影响)*/
      

  2.   

    create table tb(ConText varchar(10),   CreateTime datetime)
    insert into tb values('文本一' ,       '2008-10-3') 
    insert into tb values('文本二' ,       '2009-1-13') 
    insert into tb values('文本三' ,       '2007-9-18') 
    insert into tb values('文本四' ,       '2009-3-1') 
    insert into tb values('文本五' ,       '2008-7-15') 
    insert into tb values('文本六' ,       '2009-10-3')
    goselect col1 , context from
    (
    select distinct datename(yy,createtime) + '年' col1 , context = '' , datename(yy,createtime) + '年'  col4 from tb
    union all
    select datename(mm,createtime) + '月'  col1 , ConText , datename(yy,createtime) + '年'  col4 from tb
    ) t
    order by col4 desc , case context when '' then 1 else 2 end drop table tb /*
    col1                             context    
    -------------------------------- ---------- 
    2009年                            
    01月                              文本二
    03月                              文本四
    10月                              文本六
    2008年                            
    10月                              文本一
    07月                              文本五
    2007年                            
    09月                              文本三(所影响的行数为 9 行)*/
      

  3.   

    ---测试数据---
    if object_id('[record]') is not null drop table [record]
    go
    create table [record]([ConText] varchar(6),[CreateTime] datetime)
    insert [record]
    select '文本一','2008-10-3' union all
    select '文本二','2009-1-13' union all
    select '文本三','2007-9-18' union all
    select '文本四','2009-3-1' union all
    select '文本五','2008-7-15' union all
    select '文本六','2009-10-3'
     
    ---查询---
    select b,c
    from
    (
      select distinct year(CreateTime) as a,ltrim(year(CreateTime)) as b,' ' as c from record
      union all
      select year(CreateTime),ltrim(month(CreateTime))+'月',ConText from record
    ) t
    order by a desc,right('00'+b,3),c ---结果---
    b              c      
    -------------- ------ 
    2009            
    1月             文本二
    3月             文本四
    10月            文本六
    2008            
    7月             文本五
    10月            文本一
    2007            
    9月             文本三(所影响的行数为 9 行)
      

  4.   

    谢谢楼上的几位,问题成功解决。还有个小问题,如果用GROUP BY可以实现么?
      

  5.   

    ---------------------------------
    --  Author: liangCK 小梁
    ---------------------------------
     
    --> 生成测试数据: @T
    DECLARE @T TABLE (ConText VARCHAR(6),CreateTime DATETIME)
    INSERT INTO @T
    SELECT '文本一','2008-10-3' UNION ALL
    SELECT '文本二','2009-1-13' UNION ALL
    SELECT '文本三','2007-9-18' UNION ALL
    SELECT '文本四','2009-3-1' UNION ALL
    SELECT '文本五','2008-7-15' UNION ALL
    SELECT '文本六','2009-10-3'--SQL查询如下:SELECT 
        CASE WHEN YEAR(CreateTime) IS NULL
               THEN LTRIM(MIN(YEAR(CreateTime)))+'年'
             ELSE
               LTRIM(MIN(MONTH(CreateTime)))+'月'
        END AS CreateTime,
        CASE WHEN YEAR(CreateTime) IS NULL
               THEN ''
             ELSE
                MAX(ConText)
        END AS ConText
    FROM @T
    GROUP BY YEAR(CreateTime),CreateTime
    WITH ROLLUP
    HAVING GROUPING(YEAR(CreateTime))=0
    ORDER BY 
        CASE WHEN YEAR(CreateTime) IS NULL
                THEN MIN(YEAR(CreateTime))
             ELSE
                YEAR(CreateTime)
        END DESC,
        CASE WHEN CreateTime IS NULL
                THEN 0
             ELSE
                MIN(CreateTime)
        END /*
    CreateTime     ConText
    -------------- -------
    2009年          
    1月             文本二
    3月             文本四
    10月            文本六
    2008年          
    7月             文本五
    10月            文本一
    2007年          
    9月             文本三(9 行受影响)
    */