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,借项和贷项。多亏了你们,查询工作正常