Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/85.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
MySQL-尝试为每个不同的日期返回一行;显示现金、信用和总计_Mysql_Sql_Group By - Fatal编程技术网

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;