我有一个日期表,存储的是一个日期字段和一个名称字段,如下:CREATE TABLE MyDate(datatime datetime,toal numeric(18, 2))
由于我想要固定的格式显示日期,我就将表中的日期处理过后插入临时表。INSERT ##TempResult
SELECT CAST(DATEPART(hour,DataTime) as VARCHAR(2)) + '时' as 'DataTime',
         total numeric(18, 2)
FROM MyDate 
ORDER BY CAST(REPLACE(DataTime,'','') AS DATETIME)
插入后运行查询语句检查临时表的数据为:SELECT * FROM ##TempResult---------------------------------------
0时 99.00
1时 98.00
2时 97.00
3时 96.00
4时 95.00
5时 94.00
---------------------------------------
查询出来表数据是根据日期来然后我用了一个UNION连接查询结果SELECT * FROM ##TempResult
      UNION 
SELECT '日数据量总计' as 'DataTime', 
SUM(total) as 'total'
FROM ##TempResult
然后连接后查询的数据变成了
---------------------------------------
0时 99.00
10时 89.00
11时 88.00
12时 87.00
13时 86.00
14时 85.00
15时 84.00
16时 83.00
17时 82.00
18时 81.00
19时 80.00
1时 98.00
20时 74.00
日数据量总计 2080.00
---------------------------------------
也就是用了UNION之后表里的数据自动又根据字符串排序了一次。但是我想显示的效果是
---------------------------------------
0时 99.00
1时 98.00
2时 97.00
3时 96.00
4时 95.00
5时 94.00
日数据量总计 2080.00
---------------------------------------请问我应该怎么做?

解决方案 »

  1.   

    select * from 
    (
    SELECT * FROM ##TempResult
          UNION 
    SELECT '日数据量总计' as 'DataTime', 
    SUM(total) as 'total'
    FROM ##TempResult
    ) c order by case when datatime = '日数据量总计' then 999 else cast(substring(datatime,0,charindex('时',datatime)) as int)  
      

  2.   

    select * from  
    (
    SELECT * FROM ##TempResult
      UNION  
    SELECT '日数据量总计' as 'DataTime',  
    SUM(total) as 'total'
    FROM ##TempResult
    ) c order by case when datatime = '日数据量总计' then 999 else cast(substring(datatime,0,charindex('时',datatime)) as int) end写少了一个 end......
      

  3.   


    我就是想用UNION的时候,不用自动排序的。
    我现在想显示的效果是这样的。
    ----------------------------------------
    00时 99.00
    01时 98.00
    02时 97.00
    03时 96.00
    04时 95.00
    05时 94.00
    06时 93.00
    07时 92.00
    08时 91.00
    09时 90.00
    10时 89.00
    11时 88.00
    12时 87.00
    13时 86.00
    14时 85.00
    15时 84.00
    16时 83.00
    17时 82.00
    18时 81.00
    19时 80.00
    20时 74.00
    21时 73.00
    22时 72.00
    23时 71.00
    平均值 86.67
    日排放量总计 2080.00
    时均最大值 99.00
    时均最小值 71.00
    瞬时最大值 154.00
    瞬时最小值 0.00
    ----------------------------------------这个是我在单个数字前面加上'0'来实现字符串排序的。但是还是麻烦。
      

  4.   

    --try
    INSERT ##TempResult
        SELECT right(100+DATEPART(hour,DataTime),2) + '时' as 'DataTime',
             total 
    FROM MyDate 
    ORDER BY DATEPART(hour,DataTime)
      

  5.   

    因为你之前有个排序ORDER BY CAST(REPLACE(DataTime,'','') AS DATETIME)
    后来就没有排序,默认为按字符串排序了。SELECT * FROM ##TempResult
          UNION all --再加个all,
    SELECT '日数据量总计' as 'DataTime', 
    SUM(total) as 'total'
    FROM ##TempResult
    ORDER BY CAST(REPLACE(DataTime,'','') AS DATETIME)
      

  6.   


    好办法,学习了,我是这样写的,惭愧。。CASE LEN(DATEPART(hour,DataTime)) WHEN 1
    THEN
        '0' + CAST(DATEPART(hour,DataTime) as VARCHAR(2)) + '时'
    ELSE
        CAST(DATEPART(hour,DataTime) as VARCHAR(2)) + '时'
    END
    AS 'DataTime',