2011-07-06 174 views
3

Journal_T - 基本上这是具有正值和负值的日志表。 字段为:iddate,ref,description, amount, segment,period,year如何将数据从一列分隔为两列,如表

我想显示在两个单独的列 - debits(包含正值)和credits(包含负值)。以下是我使用的查询:这类问题通常与帮助解决

SELECT id, 
    date, 
    ref, 
    description, 
    CASE WHEN SUM(amount) >= 0 THEN SUM(amount) ELSE NULL END AS positive, 
    CASE WHEN SUM(amount) < 0 THEN SUM(amount) ELSE NULL END AS negative, 
,segment,period,year FROM Journal_T GROUP BY segment,year,period,id 
+0

通过显示,你的意思是,显示给用户?我会建议在你的代码中做这件事,而不是在你的查询中。保持查询简单,然后相应地格式化你的html。 – haydenmuhl

+0

@OMG小马谢谢。 – mmdel

回答

0

如果我理解的模式,具有CASE做的CASE。但是我认为他错了,CASE确实应该在聚合函数中,像@OMG Ponies已经正确指出的那样。在这里:

SELECT 
    id, 
    date, 
    ref, 
    description, 
    SUM(CASE WHEN amount > 0 THEN Amount END) AS TotalPositive, 
    SUM(CASE WHEN amount < 0 THEN Amount END) AS TotalNegative, 
    segment, 
    period, 
    year 
FROM Journal_T 
GROUP BY segment, year, period, id 

在不同的角度,我不认为的daterefdescription值有多大的意义输出此查询,只要你不将它们包含在GROUP BY列表。 MySQL允许你将它们包含到SELECT列表中而不用汇总,但是为这些列返回的值可能是任意的,并且与其他检索的数据(特别是和)没有多大关系。

+0

我想你想要SUM'轮CASE语句,而不是表达式... –

+0

@Michael谢谢队友。你是明星 – mmdel

+0

@OMG小马可能是。我不知道我明白什么原来的查询拉动,但如果这对OP的作品... –

1

@迈克尔是正确的,即:

$qry = mysql_query("SELECT id, date, ref, description, SUM(amount), 
          segment, period, year 
         FROM Journal_T 
        GROUP BY segment, year, period, id") or die(mysql_error()); 
+0

+1这比我的要好。 –

相关问题