【问题标题】:Sql query Solutionsql查询解决方案
【发布时间】:2009-12-05 00:25:46
【问题描述】:

我有一个查询如下。

select strftime('%Y-%m',A.traDate) as Month,sum(A.TraAmt) as Total,C.GroupType from 
TransactionTbl A left join TransactionCategory B on A.CategoryID = B.CategoryID left join 
CategoryGroup C on B.CatGRoupID=C.CatGRoupID where A.UserID=1 and A.ProfileID=1 and 
date(A.TraDate) between date('2009-12-01') and date('2010-11-01') group by C.GroupType,  
strftime('%m',A.traDate) order by Month

上面的查询给出的结果如下,

Month Total C.GroupType 
----- ----- ----------- 
2009-12 4100 Expense 
2009-12 8000 Income 
2010-01 200     Expense 
2010-01    2000    Income
2010-02    3500    Expense
2010-02    7500    Income

我想要这样的解决方案。

    Month Income Expense 
    ----- ----- ----------- 
    2009-12 8000    4100
    2010-01 8000    200
    2010-02 7500    3500

我正在努力获得这样的输出,但我可以找到任何类型的解决方案。

【问题讨论】:

    标签: sql mysql sqlite


    【解决方案1】:

    这是实现您想要的一种方式:

    SELECT
        T1.Month,
        SUM(CASE T1.GROUPTYPE WHEN 'Income' THEN T1.TOTAL ELSE 0 END) AS Income,
        SUM(CASE T1.GROUPTYPE WHEN 'Expense' THEN T1.TOTAL ELSE 0 END) AS Expense
    FROM (/* Your query here */) AS T1
    GROUP BY T1.Month
    

    【讨论】:

    • 我现在已经测试过了,有两个小错误我现在已经修复(答案已更新)。一个是 FROM 之前不应该存在的逗号,另一个是两个地方缺少的 END 关键字。现在再试一次,希望它应该工作。请注意,我已经在 MSSQL 服务器上对此进行了测试。我假设 SQLite 也支持这种语法,但还没有在 SQLite 上测试过。
    • sagar,你是说你设法在sqlite中使用case/when/then/else/end?您可以在这里发布您的“创建视图”定义吗?
    • 不,对不起。这是我的错误。此答案中给出的解决方案是正确的,我没有关注@ScSub 的任何观点。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-03-22
    • 2015-11-22
    • 2015-05-13
    • 2011-07-22
    • 1970-01-01
    相关资源
    最近更新 更多