按自定义列

时间:2018-02-26 18:19:45

标签: sql postgresql

我有一个表transaction_transaction,其中包含列:

id, status, total_amount, date_made, transaction_type

状态可以是:Active, Paid, Trashed, Renewed, Void

所以我想要做的是按日期和状态进行过滤,但由于有时没有Renewed或Trashed的记录,因此我会得到不一致的数据,当按状态分组时,它只返回Active and Paid(通知{{1} } 不见了 )。我希望它总是像以下一样回归:

Renewed and Trashed

我使用的SQL查询:

-----------------------------------
Active   | 121          | 2017-08-09
Paid     | 122          | 2017-08-19
Trashed  | 123          | 2017-08-20
Renewed  | 123          | 2017-08-20

编辑:我创建了一个表sms_admin_status,因为你说它没有表没有错,将来我可能会有新的状态,我也改变了查询以满足我的需求。

3 个答案:

答案 0 :(得分:1)

一个可能的解决方案(不是很好)是以下

select statuses.s, date_made, coalesce(SUM(amount), 0)
from (values('active'),('inactive'),('deleted')) statuses(s)
left join transactions t on statuses.s = t.status and
   date_made >= '2017-08-08'
group by statuses.s, date_made

我认为您忘记将date_made添加到group by。因此,我在那里添加了它。如您所见,可能的值在SQL中是硬编码的。其他一些解决方案(更清洁)是创建一个包含可能的状态值的表并替换我的statuses

答案 1 :(得分:0)

使用来自交易表的限制on idle tell application "Google Chrome" if it is not running then return 10 -- seconds to wait before repeating tell window 1 to if it exists then ¬ try go back active tab end try end tell return 10 -- seconds to wait before repeating end idle

SELECT ... FROM (VALUES)

根据需要添加日期列,我假设它是一个静态值

答案 2 :(得分:0)

多个where语句将限制所选行,除非它们在子查询中。我可以建议以下内容吗?

(function() {
    var amount_of_limbs = 4;

    MyClass.prototype = /** @lends MyClass# */ {
        /**
         * Introduce yourself
         */
        greet: function(){
            alert("Hello, my name is " + this.name + " and I have " + amount_of_limbs + " limbs");
        }
    };
})();