如何在相关行之前直接选择和求和

时间:2013-10-07 14:06:57

标签: mysql sql

我有一张应付账单表。

我想选择所有数据 (如果sd_doc为NULL),则检查此发票价格

但是,if sd_doc is NOT NULL会检索所有这些行的所有先前的NULL sd_doc,然后SUM prices

注意:我希望直接在所有NULL sd_doc

之前的空月

我的桌子和抽样数据

CREATE TABLE IF NOT EXISTS `d_statistics_docs` (
  `sd_id` int(11) NOT NULL AUTO_INCREMENT,
  `sd_pub` int(11) NOT NULL,
  `sd_date` date NOT NULL,
  `sd_doc` text NOT NULL,
  `price` int(11) NOT NULL,
  PRIMARY KEY (`sd_id`)
) ENGINE=MyISAM  DEFAULT CHARSET=utf8 AUTO_INCREMENT=16 ;

--
-- Dumping data for table `d_statistics_docs`
--

INSERT INTO `d_statistics_docs` (`sd_id`, `sd_pub`, `sd_date`, `sd_doc`, `price`) VALUES
(9, 256, '2013-03-01', 'scifiwallpaper1.jpg', 5),
(10, 256, '2013-04-01', 'scifiwallpaper1.jpg', 15),
(11, 256, '2013-05-01', '', 3),
(12, 256, '2013-06-01', 'scifiwallpaper1.jpg', 7),
(13, 256, '2013-07-01', '', 9),
(14, 256, '2013-08-01', '', 11),
(15, 256, '2013-09-01', 'scifiwallpaper1.jpg', 25);

我需要的结果

9   256     2013-03-01  scifiwallpaper1.jpg 5

10  256     2013-04-01  scifiwallpaper1.jpg 15

11  256     2013-05-01                       3

12  256    2013-06-01   scifiwallpaper1.jpg 10  // total 7 + 3 

13  256     2013-07-01                      9

14  256     2013-08-01                      11

15  256     2013-09-01  scifiwallpaper1.jpg 45  // total of 25+11+9

1 个答案:

答案 0 :(得分:1)

你说过null,但是你将SD_DOC设置为空格,所以我为此编程了

Select 
  * 
, Case 
  When d.SD_DOC <> '' Then 
  IfNull
  (
    ( Select Sum(d2.PRICE)
      From d_statistics_docs d2
      Where d2.SD_ID >
            ( Select Max(SD_ID)
              From d_statistics_docs d3
              Where SD_DOC <> ''
                And d3.SD_ID < d.SD_ID
             )
        And d2.SD_ID <= d.SD_ID
    )
  , d.PRICE  
  )
  Else d.PRICE
  End  TotPrev
From d_statistics_docs d