2013-10-07 30 views
2

我有應付票據的表..如何選擇和直接相加之前相關行

我想選擇所有的數據,其中 (如果sd_doc爲NULL),則檢索該發票的價格,因爲它

然而,if sd_doc is NOT NULL檢索所有以前的NULL sd_doc,然後SUM prices所有這些行共同

注:我想直接之前並非所有NULL sd_doc

空個月

我的表的sampleData

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 
+4

爲給出的例子給出你想要的輸出 –

+0

告訴我們你想要的輸出。 –

+0

我添加了所需的輸出 – user1080247

回答

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