mysql5.1数据库
表设计如下
CREATE TABLE `mrain` (
`date`  char(10) NULL ,
`sum(Nrain)`  int(11) NULL ,
`sum(Train)`  int(11) NULL ,
`sum(Arain)`  int(11) NULL ,
`sum(Nrain>0)`  int(11) NULL ,
`sum(Train>0)`  int(11) NULL ,
`sum(Arain>0)`  int(11) NULL ,
PRIMARY KEY (`date`)
)
;
数据如下:
INSERT INTO `mrain` (`date`, `sum(Nrain)`, `sum(Train)`, `sum(Arain)`, `sum(Nrain>0)`, `sum(Train>0)`, `sum(Arain>0)`) VALUES ('1951-01', 47, 42, 89, 7, 5, 8);
INSERT INTO `mrain` (`date`, `sum(Nrain)`, `sum(Train)`, `sum(Arain)`, `sum(Nrain>0)`, `sum(Train>0)`, `sum(Arain>0)`) VALUES ('1951-02', 35, 84, 119, 5, 8, 9);
INSERT INTO `mrain` (`date`, `sum(Nrain)`, `sum(Train)`, `sum(Arain)`, `sum(Nrain>0)`, `sum(Train>0)`, `sum(Arain>0)`) VALUES ('1951-03', 98, 488, 586, 5, 18, 18);
INSERT INTO `mrain` (`date`, `sum(Nrain)`, `sum(Train)`, `sum(Arain)`, `sum(Nrain>0)`, `sum(Train>0)`, `sum(Arain>0)`) VALUES ('1951-04', 79, 739, 818, 12, 19, 21);
INSERT INTO `mrain` (`date`, `sum(Nrain)`, `sum(Train)`, `sum(Arain)`, `sum(Nrain>0)`, `sum(Train>0)`, `sum(Arain>0)`) VALUES ('1951-05', 591, 1741, 2332, 7, 8, 9);
INSERT INTO `mrain` (`date`, `sum(Nrain)`, `sum(Train)`, `sum(Arain)`, `sum(Nrain>0)`, `sum(Train>0)`, `sum(Arain>0)`) VALUES ('1951-06', 528, 667, 1195, 9, 12, 15);
INSERT INTO `mrain` (`date`, `sum(Nrain)`, `sum(Train)`, `sum(Arain)`, `sum(Nrain>0)`, `sum(Train>0)`, `sum(Arain>0)`) VALUES ('1951-07', 1574, 425, 1999, 9, 11, 14);
INSERT INTO `mrain` (`date`, `sum(Nrain)`, `sum(Train)`, `sum(Arain)`, `sum(Nrain>0)`, `sum(Train>0)`, `sum(Arain>0)`) VALUES ('1951-08', 473, 2096, 2569, 8, 8, 10);
INSERT INTO `mrain` (`date`, `sum(Nrain)`, `sum(Train)`, `sum(Arain)`, `sum(Nrain>0)`, `sum(Train>0)`, `sum(Arain>0)`) VALUES ('1951-09', 316, 646, 962, 7, 14, 14);
INSERT INTO `mrain` (`date`, `sum(Nrain)`, `sum(Train)`, `sum(Arain)`, `sum(Nrain>0)`, `sum(Train>0)`, `sum(Arain>0)`) VALUES ('1951-10', 478, 706, 1184, 13, 12, 15);
INSERT INTO `mrain` (`date`, `sum(Nrain)`, `sum(Train)`, `sum(Arain)`, `sum(Nrain>0)`, `sum(Train>0)`, `sum(Arain>0)`) VALUES ('1951-11', 197, 262, 459, 11, 14, 15);
INSERT INTO `mrain` (`date`, `sum(Nrain)`, `sum(Train)`, `sum(Arain)`, `sum(Nrain>0)`, `sum(Train>0)`, `sum(Arain>0)`) VALUES ('1951-12', 66, 45, 111, 5, 6, 7);
INSERT INTO `mrain` (`date`, `sum(Nrain)`, `sum(Train)`, `sum(Arain)`, `sum(Nrain>0)`, `sum(Train>0)`, `sum(Arain>0)`) VALUES ('1952-01', 41, 114, 155, 4, 6, 6);
INSERT INTO `mrain` (`date`, `sum(Nrain)`, `sum(Train)`, `sum(Arain)`, `sum(Nrain>0)`, `sum(Train>0)`, `sum(Arain>0)`) VALUES ('1952-02', 58, 68, 126, 6, 8, 8);
INSERT INTO `mrain` (`date`, `sum(Nrain)`, `sum(Train)`, `sum(Arain)`, `sum(Nrain>0)`, `sum(Train>0)`, `sum(Arain>0)`) VALUES ('1952-03', 22, 92, 114, 3, 6, 6);
INSERT INTO `mrain` (`date`, `sum(Nrain)`, `sum(Train)`, `sum(Arain)`, `sum(Nrain>0)`, `sum(Train>0)`, `sum(Arain>0)`) VALUES ('1952-04', 50, 1063, 1113, 4, 9, 11);
INSERT INTO `mrain` (`date`, `sum(Nrain)`, `sum(Train)`, `sum(Arain)`, `sum(Nrain>0)`, `sum(Train>0)`, `sum(Arain>0)`) VALUES ('1952-05', 794, 1327, 2121, 16, 18, 20);
INSERT INTO `mrain` (`date`, `sum(Nrain)`, `sum(Train)`, `sum(Arain)`, `sum(Nrain>0)`, `sum(Train>0)`, `sum(Arain>0)`) VALUES ('1952-06', 276, 675, 951, 5, 8, 9);
INSERT INTO `mrain` (`date`, `sum(Nrain)`, `sum(Train)`, `sum(Arain)`, `sum(Nrain>0)`, `sum(Train>0)`, `sum(Arain>0)`) VALUES ('1952-07', 1530, 845, 2375, 11, 10, 12);
INSERT INTO `mrain` (`date`, `sum(Nrain)`, `sum(Train)`, `sum(Arain)`, `sum(Nrain>0)`, `sum(Train>0)`, `sum(Arain>0)`) VALUES ('1952-08', 1195, 1346, 2541, 19, 18, 24);
INSERT INTO `mrain` (`date`, `sum(Nrain)`, `sum(Train)`, `sum(Arain)`, `sum(Nrain>0)`, `sum(Train>0)`, `sum(Arain>0)`) VALUES ('1952-09', 424, 457, 881, 9, 12, 13);
INSERT INTO `mrain` (`date`, `sum(Nrain)`, `sum(Train)`, `sum(Arain)`, `sum(Nrain>0)`, `sum(Train>0)`, `sum(Arain>0)`) VALUES ('1952-10', 324, 644, 968, 13, 17, 18);
INSERT INTO `mrain` (`date`, `sum(Nrain)`, `sum(Train)`, `sum(Arain)`, `sum(Nrain>0)`, `sum(Train>0)`, `sum(Arain>0)`) VALUES ('1952-11', 211, 259, 470, 12, 16, 17);
INSERT INTO `mrain` (`date`, `sum(Nrain)`, `sum(Train)`, `sum(Arain)`, `sum(Nrain>0)`, `sum(Train>0)`, `sum(Arain>0)`) VALUES ('1952-12', 72, 91, 163, 9, 10, 11);我想查询出sum(Nrain)并按下面的结构显示出来      1   2    3     4  5    6  7    8  9    10  11   12
1951  47   35   98    79     591  528 1574 473  316  478 197  66
1952

1953
...
date定义为char类型,可以修改
请帮帮忙,先谢谢啦

解决方案 »

  1.   

     select left(date,4),group_concat(`sum(Nrain)` separator ' ') from mrain group by left(date,4);
      

  2.   

    SELECT
     LEFT(date, 4) AS yr,
     SUM(IF(RIGHT(date, 2) = '01', `sum(Nrain)`, 0)) AS "1",
     SUM(IF(RIGHT(date, 2) = '02', `sum(Nrain)`, 0)) AS "2",
     SUM(IF(RIGHT(date, 2) = '03', `sum(Nrain)`, 0)) AS "3",
     SUM(IF(RIGHT(date, 2) = '04', `sum(Nrain)`, 0)) AS "4",
     SUM(IF(RIGHT(date, 2) = '05', `sum(Nrain)`, 0)) AS "5",
     SUM(IF(RIGHT(date, 2) = '06', `sum(Nrain)`, 0)) AS "6",
     SUM(IF(RIGHT(date, 2) = '07', `sum(Nrain)`, 0)) AS "7",
     SUM(IF(RIGHT(date, 2) = '08', `sum(Nrain)`, 0)) AS "8",
     SUM(IF(RIGHT(date, 2) = '09', `sum(Nrain)`, 0)) AS "9",
     SUM(IF(RIGHT(date, 2) = '10', `sum(Nrain)`, 0)) AS "10",
     SUM(IF(RIGHT(date, 2) = '11', `sum(Nrain)`, 0)) AS "11",
     SUM(IF(RIGHT(date, 2) = '12', `sum(Nrain)`, 0)) AS "12"
    FROM mrain
    GROUP BY yr你的表结构重新设计一下,date 变成两个字段 year - month,其他字段名改掉
      

  3.   

    mysql> select left(`date`,4),
        ->  sum(if(mid(`date`,6,2)=1,`sum(Nrain)`,0)) as `1`,
        ->  sum(if(mid(`date`,6,2)=2,`sum(Nrain)`,0)) as `2`,
        ->  sum(if(mid(`date`,6,2)=3,`sum(Nrain)`,0)) as `3`,
        ->  sum(if(mid(`date`,6,2)=4,`sum(Nrain)`,0)) as `4`,
        ->  sum(if(mid(`date`,6,2)=5,`sum(Nrain)`,0)) as `5`,
        ->  sum(if(mid(`date`,6,2)=6,`sum(Nrain)`,0)) as `6`,
        ->  sum(if(mid(`date`,6,2)=7,`sum(Nrain)`,0)) as `7`,
        ->  sum(if(mid(`date`,6,2)=8,`sum(Nrain)`,0)) as `8`,
        ->  sum(if(mid(`date`,6,2)=9,`sum(Nrain)`,0)) as `9`,
        ->  sum(if(mid(`date`,6,2)=10,`sum(Nrain)`,0)) as `10`,
        ->  sum(if(mid(`date`,6,2)=11,`sum(Nrain)`,0)) as `11`,
        ->  sum(if(mid(`date`,6,2)=12,`sum(Nrain)`,0)) as `12`
        -> from mrain
        -> group by left(`date`,4);
    +----------------+------+------+------+------+------+------+------+------+------+------+------+------+
    | left(`date`,4) | 1    | 2    | 3    | 4    | 5    | 6    | 7    | 8    | 9    | 10   | 11   | 12   |
    +----------------+------+------+------+------+------+------+------+------+------+------+------+------+
    | 1951           |   47 |   35 |   98 |   79 |  591 |  528 | 1574 |  473 |  316 |  478 |  197 |   66 |
    | 1952           |   41 |   58 |   22 |   50 |  794 |  276 | 1530 | 1195 |  424 |  324 |  211 |   72 |
    +----------------+------+------+------+------+------+------+------+------+------+------+------+------+
    2 rows in set (0.00 sec)mysql>
      

  4.   

    就是静态SUM(IF())解决,动态用SP+PREPARE(EXECUTE)
    SELECT
     LEFT(date, 4) AS yr,
     SUM(IF(RIGHT(date, 2) = '01', `sum(Nrain)`, 0)) AS "1",
     SUM(IF(RIGHT(date, 2) = '02', `sum(Nrain)`, 0)) AS "2",
     SUM(IF(RIGHT(date, 2) = '03', `sum(Nrain)`, 0)) AS "3",
     SUM(IF(RIGHT(date, 2) = '04', `sum(Nrain)`, 0)) AS "4",
     SUM(IF(RIGHT(date, 2) = '05', `sum(Nrain)`, 0)) AS "5",
     SUM(IF(RIGHT(date, 2) = '06', `sum(Nrain)`, 0)) AS "6",
     SUM(IF(RIGHT(date, 2) = '07', `sum(Nrain)`, 0)) AS "7",
     SUM(IF(RIGHT(date, 2) = '08', `sum(Nrain)`, 0)) AS "8",
     SUM(IF(RIGHT(date, 2) = '09', `sum(Nrain)`, 0)) AS "9",
     SUM(IF(RIGHT(date, 2) = '10', `sum(Nrain)`, 0)) AS "10",
     SUM(IF(RIGHT(date, 2) = '11', `sum(Nrain)`, 0)) AS "11",
     SUM(IF(RIGHT(date, 2) = '12', `sum(Nrain)`, 0)) AS "12"
    FROM mrain
    GROUP BY yr
      

  5.   

    就是静态SUM(IF())解决,动态用SP+PREPARE(EXECUTE)
    SELECT
     LEFT(date, 4) AS yr,
     SUM(IF(RIGHT(date, 2) = '01', `sum(Nrain)`, 0)) AS "1",
     SUM(IF(RIGHT(date, 2) = '02', `sum(Nrain)`, 0)) AS "2",
     SUM(IF(RIGHT(date, 2) = '03', `sum(Nrain)`, 0)) AS "3",
     SUM(IF(RIGHT(date, 2) = '04', `sum(Nrain)`, 0)) AS "4",
     SUM(IF(RIGHT(date, 2) = '05', `sum(Nrain)`, 0)) AS "5",
     SUM(IF(RIGHT(date, 2) = '06', `sum(Nrain)`, 0)) AS "6",
     SUM(IF(RIGHT(date, 2) = '07', `sum(Nrain)`, 0)) AS "7",
     SUM(IF(RIGHT(date, 2) = '08', `sum(Nrain)`, 0)) AS "8",
     SUM(IF(RIGHT(date, 2) = '09', `sum(Nrain)`, 0)) AS "9",
     SUM(IF(RIGHT(date, 2) = '10', `sum(Nrain)`, 0)) AS "10",
     SUM(IF(RIGHT(date, 2) = '11', `sum(Nrain)`, 0)) AS "11",
     SUM(IF(RIGHT(date, 2) = '12', `sum(Nrain)`, 0)) AS "12"
    FROM mrain
    GROUP BY LEFT(date, 4)
      

  6.   

    刚下班回来,没来得及回复大家,很报歉,谢谢大家对我的帮助 
    请帮忙解释下这句是什么意思?谢谢
    sum(if(mid(`date`,6,2)=1,`sum(Nrain)`,0)) as `1`,
      

  7.   

    就是只对时间是1月的那些行进行sum统计,把统计结果作为1月那列的结果。
      

  8.   

    我想知道这函数的结构sum(if(),x,y),x指什么,y指什么
      

  9.   


    MySQL官方文档 http://dev.mysql.com/doc/refman/5.1/zh/index.htmlIF(expr1,expr2,expr3) 
    如果 expr1 是TRUE (expr1 <> 0 and expr1 <> NULL),则 IF()的返回值为expr2; 否则返回值则为 expr3。IF() 的返回值为数字值或字符串值,具体情况视其所在语境而定。mysql> SELECT IF(1>2,2,3);        -> 3mysql> SELECT IF(1<2,'yes ','no');        -> 'yes'mysql> SELECT IF(STRCMP('test','test1'),'no','yes');        -> 'no'如果expr2 或expr3中只有一个明确是 NULL,则IF() 函数的结果类型 为非NULL表达式的结果类型。 expr1 作为一个整数值进行计算,就是说,假如你正在验证浮点值或字符串值,   那么应该使用比较运算进行检验。 mysql> SELECT IF(0.1,1,0);        -> 0mysql> SELECT IF(0.1<>0,1,0);        -> 1在所示的第一个例子中,IF(0.1)的返回值为0,原因是 0.1 被转化为整数值,从而引起一个对 IF(0)的检验。这或许不是你想要的情况。在第二个例子中,比较检验了原始浮点值,目的是为了了解是否其为非零值。比较结果使用整数。 IF() (这一点在其被储存到临时表时很重要 ) 的默认返回值类型按照以下方式计算: 表达式
     返回值
     
    expr2 或expr3 返回值为一个字符串。
     字符串
     
    expr2 或expr3 返回值为一个浮点值。
     浮点
     
    expr2 或 expr3 返回值为一个整数。  
     整数
     假如expr2 和expr3 都是字符串,且其中任何一个字符串区分大小写,则返回结果是区分大小写。
      

  10.   

    SELECT
     LEFT(date, 4) AS yr,
     SUM(IF(RIGHT(date, 2) = '01', `sum(Nrain)`, 0)) AS "1",
     SUM(IF(RIGHT(date, 2) = '02', `sum(Nrain)`, 0)) AS "2",
     SUM(IF(RIGHT(date, 2) = '03', `sum(Nrain)`, 0)) AS "3",
     SUM(IF(RIGHT(date, 2) = '04', `sum(Nrain)`, 0)) AS "4",
     SUM(IF(RIGHT(date, 2) = '05', `sum(Nrain)`, 0)) AS "5",
     SUM(IF(RIGHT(date, 2) = '06', `sum(Nrain)`, 0)) AS "6",
     SUM(IF(RIGHT(date, 2) = '07', `sum(Nrain)`, 0)) AS "7",
     SUM(IF(RIGHT(date, 2) = '08', `sum(Nrain)`, 0)) AS "8",
     SUM(IF(RIGHT(date, 2) = '09', `sum(Nrain)`, 0)) AS "9",
     SUM(IF(RIGHT(date, 2) = '10', `sum(Nrain)`, 0)) AS "10",
     SUM(IF(RIGHT(date, 2) = '11', `sum(Nrain)`, 0)) AS "11",
     SUM(IF(RIGHT(date, 2) = '12', `sum(Nrain)`, 0)) AS "12"
    FROM mrain
    GROUP BY yr