2015-12-02 88 views
0

我有一张表,我有一年中所有月份的电话费。下面是表的结构:一个月后如何使用mysql查找第一个非空列名

CREATE TABLE IF NOT EXISTS `sct_conso_2015` (
    `id` int(11) NOT NULL AUTO_INCREMENT, 
    `January` decimal(10,2) DEFAULT NULL, 
    `February` decimal(10,2) DEFAULT NULL, 
    `March` decimal(10,2) DEFAULT NULL, 
    `April` decimal(10,2) DEFAULT NULL, 
    `May` decimal(10,2) DEFAULT NULL, 
    `June` decimal(10,2) DEFAULT NULL, 
    `July` decimal(10,2) DEFAULT NULL, 
    `August` decimal(10,2) DEFAULT NULL, 
    `September` decimal(10,2) DEFAULT NULL, 
    `October` decimal(10,2) DEFAULT NULL, 
    `November` decimal(10,2) DEFAULT NULL, 
    `December` decimal(10,2) DEFAULT NULL, 
    `type` enum('pabx','gsm') NOT NULL, 
    `id_user` int(11) NOT NULL, 
    `number` varchar(9) NOT NULL, 
    PRIMARY KEY (`id`), 
    UNIQUE KEY `number` (`number`) 
) ENGINE=InnoDB DEFAULT CHARSET=latin1 

,当我收到的每个数字账单每个月,我将它们加载到数据库,一个月。 在我的应用程序中,我需要获取数量不为null的最后一个月。我写了这个查询,但它似乎错了,我不明白为什么:

SELECT 
    CASE 
     WHEN December IS NOT NULL THEN 'December' 
     WHEN November IS NOT NULL THEN 'November' 
     WHEN October IS NOT NULL THEN 'October' 
     WHEN September IS NOT NULL THEN 'September' 
     WHEN August IS NOT NULL THEN 'August' 
     ELSE '' 
    END as 'Month' 
FROM sct_conso_2015 LIMIT 1 

这是获得上个月的法案准备。在我的情况下,我得到'九月'月份,但10月份已经在数据库中。我的查询出了什么问题?

+1

重新设计您的表,每行一个月。 – jarlh

+0

你能给我一个概述作为答案吗? – pollux1er

+0

create table phone_bills(id int,year int,month int,cost decimal(10,2)etc。也添加一些约束。 – jarlh

回答

0

MySQL COALESCE()函数返回列表的first non-NULL值,如果没有非NULL值,则返回NULL。

SELECT COALESCE(December,November,October...) Month 
FROM sct_conso_2015 LIMIT 1 
+0

在我的情况下,我想要列的名称不是null,但coalesce返回值那一排我猜 – pollux1er

相关问题