MySQL有问题吗

MySQL有问题吗,mysql,Mysql,我有一个MySQL问题,下面是查询: SELECT JAN.Sales_Phase, JAN.January, FEB.Febuary, MAR.March, APR.April, MAY.May, JUN.June, JUL.July, AUG.August, SEP.September, OCT.October, NOV.November, DEC.December FROM (SELECT

我有一个MySQL问题,下面是查询:

SELECT        JAN.Sales_Phase, JAN.January, FEB.Febuary, MAR.March, APR.April, MAY.May, JUN.June, JUL.July, AUG.August, SEP.September, OCT.October, NOV.November, 
                         DEC.December
FROM            (SELECT        Sales_Phase, COALESCE (SUM(PO_Amount_USD), 0) AS January
                          FROM            MasterTable_TM
                          WHERE        (Sales_Phase = 'Credits Card') OR
                                                    (Sales_Phase = 'PO Received') AND (PO_Month = '1')
                          GROUP BY Sales_Phase) AS JAN LEFT OUTER JOIN
                             (SELECT        Sales_Phase, COALESCE (SUM(PO_Amount_USD), 0) AS Febuary
                               FROM            MasterTable_TM AS MasterTable_TM_1
                               WHERE        (Sales_Phase = 'Credits Card') OR
                                                         (Sales_Phase = 'PO Received') AND (PO_Month = '2')
                               GROUP BY Sales_Phase) AS FEB ON FEB.Sales_Phase = JAN.Sales_Phase LEFT OUTER JOIN
                             (SELECT        Sales_Phase, COALESCE (SUM(PO_Amount_USD), 0) AS March
                               FROM            MasterTable_TM AS MasterTable_TM_2
                               WHERE        (Sales_Phase = 'Credits Card') OR
                                                         (Sales_Phase = 'PO Received') AND (PO_Month = '3')
                               GROUP BY Sales_Phase) AS MAR ON MAR.Sales_Phase = FEB.Sales_Phase LEFT OUTER JOIN
                             (SELECT        Sales_Phase, COALESCE (SUM(PO_Amount_USD), 0) AS April
                               FROM            MasterTable_TM AS MasterTable_TM_3
                               WHERE        (Sales_Phase = 'Credits Card') OR
                                                         (Sales_Phase = 'PO Received') AND (PO_Month = '4')
                               GROUP BY Sales_Phase) AS APR ON APR.Sales_Phase = MAR.Sales_Phase LEFT OUTER JOIN
                             (SELECT        Sales_Phase, COALESCE (SUM(PO_Amount_USD), 0) AS May
                               FROM            MasterTable_TM AS MasterTable_TM_4
                               WHERE        (Sales_Phase = 'Credits Card') OR
                                                         (Sales_Phase = 'PO Received') AND (PO_Month = '5')
                               GROUP BY Sales_Phase) AS MAY ON MAY.Sales_Phase = APR.Sales_Phase LEFT OUTER JOIN
                             (SELECT        Sales_Phase, COALESCE (SUM(PO_Amount_USD), 0) AS June
                               FROM            MasterTable_TM AS MasterTable_TM_5
                               WHERE        (Sales_Phase = 'Credits Card') OR
                                                         (Sales_Phase = 'PO Received') AND (PO_Month = '6')
                               GROUP BY Sales_Phase) AS JUN ON JUN.Sales_Phase = MAY.Sales_Phase LEFT OUTER JOIN
                             (SELECT        Sales_Phase, COALESCE (SUM(PO_Amount_USD), 0) AS July
                               FROM            MasterTable_TM AS MasterTable_TM_6
                               WHERE        (Sales_Phase = 'Credits Card') OR
                                                         (Sales_Phase = 'PO Received') AND (PO_Month = '7')
                               GROUP BY Sales_Phase) AS JUL ON JUL.Sales_Phase = JUN.Sales_Phase LEFT OUTER JOIN
                             (SELECT        Sales_Phase, COALESCE (SUM(PO_Amount_USD), 0) AS August
                               FROM            MasterTable_TM AS MasterTable_TM_7
                               WHERE        (Sales_Phase = 'Credits Card') OR
                                                         (Sales_Phase = 'PO Received') AND (PO_Month = '8')
                               GROUP BY Sales_Phase) AS AUG ON AUG.Sales_Phase = JUL.Sales_Phase LEFT OUTER JOIN
                             (SELECT        Sales_Phase, COALESCE (SUM(PO_Amount_USD), 0) AS September
                               FROM            MasterTable_TM AS MasterTable_TM_8
                               WHERE        (Sales_Phase = 'Credits Card') OR
                                                         (Sales_Phase = 'PO Received') AND (PO_Month = '9')
                               GROUP BY Sales_Phase) AS SEP ON SEP.Sales_Phase = AUG.Sales_Phase LEFT OUTER JOIN
                             (SELECT        Sales_Phase, COALESCE (SUM(PO_Amount_USD), 0) AS October
                               FROM            MasterTable_TM AS MasterTable_TM_9
                               WHERE        (Sales_Phase = 'Credits Card') OR
                                                         (Sales_Phase = 'PO Received') AND (PO_Month = '10')
                               GROUP BY Sales_Phase) AS OCT ON OCT.Sales_Phase = SEP.Sales_Phase LEFT OUTER JOIN
                             (SELECT        Sales_Phase, COALESCE (SUM(PO_Amount_USD), 0) AS November
                               FROM            MasterTable_TM AS MasterTable_TM_10
                               WHERE        (Sales_Phase = 'Credits Card') OR
                                                         (Sales_Phase = 'PO Received') AND (PO_Month = '11')
                               GROUP BY Sales_Phase) AS NOV ON NOV.Sales_Phase = OCT.Sales_Phase LEFT OUTER JOIN
                             (SELECT        Sales_Phase, COALESCE (SUM(PO_Amount_USD), 0) AS December
                               FROM            MasterTable_TM AS MasterTable_TM_11
                               WHERE        (Sales_Phase = 'Credits Card') OR
                                                         (Sales_Phase = 'PO Received') AND (PO_Month = '12')
                               GROUP BY Sales_Phase) AS DEC ON DEC.Sales_Phase = NOV.Sales_Phase
9月和10月有数据记录,但另一个月根本没有数据。 我试图运行此查询,但返回的结果为零。如果我删除另一个月,只在查询中保留9月和10月,结果就会返回给我

即使是空的,如何显示其他月份?
虽然使用了COALESCE()函数,但它似乎没有发挥作用。

实现pivot实际上不需要太多的连接,只需按大小写分组即可:

SELECT Sales_Phase
     , SUM(case PO_Month when 1 then PO_Amount_USD else 0 end) AS January
     , SUM(case PO_Month when 2 then PO_Amount_USD else 0 end) AS Febuary
     , SUM(case PO_Month when 3 then PO_Amount_USD else 0 end) AS March
     , SUM(case PO_Month when 4 then PO_Amount_USD else 0 end) AS April
     , SUM(case PO_Month when 5 then PO_Amount_USD else 0 end) AS May
     , SUM(case PO_Month when 6 then PO_Amount_USD else 0 end) AS June
     , SUM(case PO_Month when 7 then PO_Amount_USD else 0 end) AS July
     , SUM(case PO_Month when 8 then PO_Amount_USD else 0 end) AS August
     , SUM(case PO_Month when 9 then PO_Amount_USD else 0 end) AS September
     , SUM(case PO_Month when 10 then PO_Amount_USD else 0 end) AS October
     , SUM(case PO_Month when 11 then PO_Amount_USD else 0 end) AS November
     , SUM(case PO_Month when 12 then PO_Amount_USD else 0 end) AS December
  FROM MasterTable_TM
 WHERE (Sales_Phase = 'Credits Card') 
    OR (Sales_Phase = 'PO Received') 
   AND (PO_Month between '1' and '12') -- these conditions do really make no sense, but leave it as the original sample code
 GROUP BY Sales_Phase
您的查询中有两个问题:

  • 如果1月份没有数据,则第一个子查询将不返回任何内容,因此其他左连接显然不会返回任何内容
  • (销售阶段='Credits Card')或(销售阶段='PO Received')和(PO\U Month='1')
    非常混乱,如果销售阶段='Credits Card',您想返回所有月份的数据吗?
    的优先级高于

  • 你能编辑你的帖子并添加表格结构,里面有几行数据吗?这很好!工作顺利。谢谢这种情况(从'1'到'12'之间的一个月)已经不需要了。@MistF我更新了一些问题的答案,希望你能解释一下。1。是的,我也注意到了这个问题。毕竟,一月是空的,因此没有数据可以与连接条件匹配。2.嗯,你刚刚把我从这个错误中唤醒。我想要两个销售阶段的数据。再次感谢。总而言之。