【问题标题】:MYSQL Syntax AssistanceMYSQL 语法帮助
【发布时间】:2021-06-10 20:12:57
【问题描述】:

有人可以用这个查询为我指明正确的方向吗? 无论我尝试哪种方式,我都会继续出错

SELECT b.SOLD_TO
     , b.CUSTOMER
     , b.JANUARY_BUDGET
     , Round(sum(d.TOTAL_WEIGHT)/1000,2) AS MONTHLY_DESPATCH
     , if(sum(d.TOTAL_WEIGHT)/1000=0 AND b.JANUARY_BUDGET=0,"DOUBLE_ZERO",
if(sum(d.TOTAL_WEIGHT)/1000>0 AND b.JANUARY_BUDGET=0,"NO_BUDGET_GOOD_SHIPMENT",
if(sum(d.TOTAL_WEIGHT)/1000>0 AND b.JANUARY_BUDGET>0 AND (sum(d.TOTAL_WEIGHT)/1000> b.JANUARY_BUDGET,"ABOVE_BUDGET",
if(sum(d.TOTAL_WEIGHT)/1000>0 AND b.JANUARY_BUDGET>0 AND (sum(d.TOTAL_WEIGHT)/1000< b.JANUARY_BUDGET,"POOR_RESULT")))) AS PERFORMANCE
FROM budget2021 b
left JOIN despatches2021 d on d.SOLD_TO = b.SOLD_TO
WHERE b.SOLD_TO=69946 AND d.INVOICE_DATE BETWEEN 20210101 and 20210131
GROUP BY b.SOLD_TO
     , b.CUSTOMER
     , b.JANUARY_BUDGET

【问题讨论】:

  • 等到您了解表别名。他们会让你大吃一惊:-)。并且知道LEFT JOIN x ... WHERE x =...INNER JOIN x... 相同
  • @RocketHazmat 好建议,谢谢。我将数据放入 php 并根据 mysql 发送给它的数据将其处理为 4 个查询。愚蠢的为什么我以前没有想到这个,一个更简单的解决方案!再次感谢
  • 删除所有/1000。如果一个数除以 1000 是正数,那么这个数本身也是正数。
  • 请解释“无论我尝试哪种方式”以及“我遇到错误”。究竟是什么错误?你试过什么?
  • 首先,没有右括号,然后从那里走下坡路: if(sum(d.TOTAL_WEIGHT)/1000=0 AND b.JANUARY_BUDGET=0,"DOUBLE_ZERO "

标签: mysql syntax syntax-error


【解决方案1】:

嗯,很难解释,你做错了什么

IF(condition,true,false) 是独立于嵌套数量的形式。

上帝的代码缩进有助于处理这些事情

我还必须在最后一个 IF 的末尾添加一个 NULL,因为我真的不知道你想用这个去哪里

SELECT 
    b.SOLD_TO,
    b.CUSTOMER,
    b.JANUARY_BUDGET,
    ROUND(SUM(d.TOTAL_WEIGHT) / 1000, 2) AS MONTHLY_DESPATCH,
    IF(SUM(d.TOTAL_WEIGHT) / 1000 = 0
            AND b.JANUARY_BUDGET = 0,
        'DOUBLE_ZERO',
        IF(SUM(d.TOTAL_WEIGHT) / 1000 > 0
                AND b.JANUARY_BUDGET = 0,
            'NO_BUDGET_GOOD_SHIPMENT',
            IF(SUM(d.TOTAL_WEIGHT) / 1000 > 0
                    AND b.JANUARY_BUDGET > 0
                    AND (SUM(d.TOTAL_WEIGHT) / 1000 > b.JANUARY_BUDGET),
                'ABOVE_BUDGET',
                IF(SUM(d.TOTAL_WEIGHT) / 1000 > 0
                        AND b.JANUARY_BUDGET > 0
                        AND (SUM(d.TOTAL_WEIGHT) / 1000 < b.JANUARY_BUDGET),
                    'POOR_RESULT',
                    NULL)))) AS PERFORMANCE   -- here i added the NULL
FROM
    budget2021 b
        LEFT JOIN
    despatches2021 d ON d.SOLD_TO = b.SOLD_TO
WHERE
    b.SOLD_TO = 69946
        AND d.INVOICE_DATE BETWEEN 20210101 AND 20210131
GROUP BY b.SOLD_TO , b.CUSTOMER , b.JANUARY_BUDGET

【讨论】:

  • 惊人的工作!它适用于每种组合。 '双零不会产生任何记录,但我可以将其用作“空”,非常感谢
  • 感谢大家,我对这个论坛的帮助(和专业知识)感到震惊,感谢所有做出贡献的人
  • 那个 LEFT JOIN 仍然没有做太多的事情
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-02-11
  • 2014-06-18
  • 1970-01-01
  • 1970-01-01
  • 2016-11-26
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多