Php 如何将一列中的值分隔为表中的两列

Php 如何将一列中的值分隔为表中的两列,php,mysql,sql,Php,Mysql,Sql,Journal\u T-基本上,这是带有正值和负值的日记账表。 字段包括:id,日期,ref,说明,金额,段,期间,年 我想在两个单独的列中显示它-借方(包含正值)和贷方(包含负值)。以下是我正在使用的查询: $qry = mysql_query("SELECT id, date, ref, description, SUM(amount), segment, period, year FROM

Journal\u T
-基本上,这是带有正值和负值的日记账表。 字段包括:
id
日期
ref
说明
金额
期间

我想在两个单独的列中显示它-
借方
(包含正值)和
贷方
(包含负值)。以下是我正在使用的查询:

$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());

如果我理解该模式,请使用
CASE

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
选择id,
日期,
裁判,
描述
如果SUM(amount)>=0,则SUM(amount)ELSE NULL结束为正值,
如果SUM(amount)<0,则SUM(amount)ELSE NULL结束为负值,
按段、年、期、id分类的日记账组的、段、期、年

@Michael是对的,这类问题通常是通过案例来解决的。然而,我认为他搞错了,案例确实应该在聚合函数中,就像@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
选择
身份证件
日期,
裁判,
描述
总和(金额大于0时,则金额结束)为Total正值,
总和(如果金额小于0,则金额结束)为总负值,
段
时期
年
来自期刊
按部门、年度、期间、id分组

另一方面,我不认为
date
ref
description
的值在该查询的输出中有多大意义,只要您不将它们包括在GROUP BY列表中。MySQL确实允许您在不进行聚合的情况下将它们包括在选择列表中,但是为这些列返回的值可能是任意的,并且与检索到的其他数据(特别是与总和)没有太大关系。

通过显示,您是指向用户显示吗?我建议您在代码中这样做,而不是在查询中这样做。保持查询的直截了当,然后相应地格式化您的html。@OMG Ponies,这可能是错误的。我不确定我是否理解最初的查询是什么意思,但如果这对OP有效的话…@OMG Ponies@Michael谢谢大家。实际上我省略了description,ref,date字段,因为它们不再需要了。这基本上是一个试算表,我想输出,所以我需要的是段,期间,年,总账ID,借项和贷项。多亏了你们,查询工作正常