MySQL-尝试为每个不同的日期返回一行;显示现金、信用和总计
我试图将每个独特的日期合并成一行。取而代之,我得到的是作为一行返回的现金总额,然后作为另一行返回的信用总额。如何将这些行合并为按日期分组的单行 请参阅下面我的查询:MySQL-尝试为每个不同的日期返回一行;显示现金、信用和总计,mysql,sql,group-by,Mysql,Sql,Group By,我试图将每个独特的日期合并成一行。取而代之,我得到的是作为一行返回的现金总额,然后作为另一行返回的信用总额。如何将这些行合并为按日期分组的单行 请参阅下面我的查询: SELECT DISTINCT orders.service_date, /* CASH TOTAL */ CASE WHEN customer.payment_type = "Cash" THEN CONCAT('$', (SELECT SUM( ((CASE WHEN orders.se
SELECT
DISTINCT orders.service_date,
/* CASH TOTAL */
CASE WHEN
customer.payment_type = "Cash"
THEN
CONCAT('$',
(SELECT
SUM(
((CASE
WHEN
orders.service= 'MT'
THEN
cast(customer.mtrate as DECIMAL(10,2))
WHEN
orders.service= 'MTF'
THEN
cast(customer.mtfrate as DECIMAL(10,2))
WHEN
orders.service= 'MTB'
THEN
cast(customer.mtbrate as DECIMAL(10,2))
END) + cast(((orders.cu + orders.pw + orders.r + orders.lr + orders.misc) * 0.80) as DECIMAL(10,2))))))
ELSE
" - "
END as Cash,
/* CREDIT TOTAL */
CASE WHEN
customer.payment_type = "Credit"
THEN
CONCAT('$',
(SELECT
SUM(
((CASE
WHEN
orders.service= 'MT'
THEN
cast(customer.mtrate as DECIMAL(10,2))
WHEN
orders.service= 'MTF'
THEN
cast(customer.mtfrate as DECIMAL(10,2))
WHEN
orders.service= 'MTB'
THEN
cast(customer.mtbrate as DECIMAL(10,2))
END) + cast(((orders.cu + orders.pw + orders.r + orders.lr + orders.misc) * 0.80) as DECIMAL(10,2))))))
ELSE
" - "
END as Credit,
/* GRAND TOTAL */
CONCAT('$',
(SELECT
SUM(
((CASE
WHEN
orders.service= 'MT'
THEN
cast(customer.mtrate as DECIMAL(10,2))
WHEN
orders.service= 'MTF'
THEN
cast(customer.mtfrate as DECIMAL(10,2))
WHEN
orders.service= 'MTB'
THEN
cast(customer.mtbrate as DECIMAL(10,2))
END) + cast(((orders.cu + orders.pw + orders.r + orders.lr + orders.misc) * 0.80) as DECIMAL(10,2)))))) as Total
FROM finalproject.orders
INNER JOIN finalproject.customer
USING(customerid)
GROUP BY customer.payment_type, orders.service_date
ORDER BY orders.service_date ASC
返回的是:
大多数你可以忽略的查询-算法&比如。。。我是MySQL的新手。。。如有任何建议,我们将不胜感激。谢谢 通过使用按客户分组。付款类型,订单。服务日期,您将在同一天创建两行最简单的解决方案-将其包装在另一个选择中: 选择服务日期、现金、信用、sumtotal as total from-您的原始查询-按o分组。服务日期已关闭。仅按服务日期分组,因为您希望每个服务日期有一个结果行。然后将付款类型包括在条件加成中,即在金额内
当我只按orders.service\u date分组时,它返回了一个语法错误。。。我该怎么说呢?还是会出现这个错误。。。试图解释它。不过我有点明白你在说什么。错误代码:1055。SELECT列表的表达式2不在GROUP BY子句中,并且包含未聚合列“o.Cash”,该列在功能上不依赖于GROUP BY子句中的列;这与sql\u mode=only\u full\u group\u不兼容是的,这是肮脏的,我不推荐这种方法。这个错误源于现金,顺便说一句,是信用卡。您必须聚合列,例如maxcash、maxcredit。最后,您应该添加一个ORDERBY子句。请参见旁注:为什么所有这些类型转换?这些值不是存储为小数吗?至于美元符号:我不会选择这些符号,但让GUI层来显示它们或不显示它们。至于DISTINCT:这不起作用,因为没有两行是相同的,它们的服务日期、现金或信用金额都不同。@ThorstenKettner数据库是从STS自动生成的。。。我想我可以用alter语句把它们改成小数?另外,我们注意到了美元符号&明显的。谢谢你的信息!你把它清理干净了!我需要学习更多关于SQL语法的知识,比如o.orders&这些缩写。你的看起来超级干净,工作起来很有魅力。非常感谢。
SELECT
o.service_date,
SUM(CASE WHEN c.payment_type = 'Cash' THEN
CASE o.service
WHEN 'MT' THEN CAST(c.mtrate AS DECIMAL(10,2))
WHEN 'MTF' THEN CAST(c.mtfrate AS DECIMAL(10,2))
WHEN 'MTB' THEN CAST(c.mtbrate AS DECIMAL(10,2))
END +
CAST(((o.cu + o.pw + o.r + o.lr + o.misc) * 0.80) AS DECIMAL(10,2))
END
) AS cash,
SUM(CASE WHEN c.payment_type = 'Credit' THEN
CASE o.service
WHEN 'MT' THEN CAST(c.mtrate AS DECIMAL(10,2))
WHEN 'MTF' THEN CAST(c.mtfrate AS DECIMAL(10,2))
WHEN 'MTB' THEN CAST(c.mtbrate AS DECIMAL(10,2))
END +
CAST(((o.cu + o.pw + o.r + o.lr + o.misc) * 0.80) AS DECIMAL(10,2))
END
) AS credit,
SUM(CASE o.service
WHEN 'MT' THEN CAST(c.mtrate AS DECIMAL(10,2))
WHEN 'MTF' THEN CAST(c.mtfrate AS DECIMAL(10,2))
WHEN 'MTB' THEN CAST(c.mtbrate AS DECIMAL(10,2))
END +
CAST(((o.cu + o.pw + o.r + o.lr + o.misc) * 0.80) AS DECIMAL(10,2))
) AS total
FROM finalproject.orders o
JOIN finalproject.customer c USING (customerid)
GROUP BY o.service_date
ORDER BY o.service_date;