繁体   English   中英

如何将带有case语句的mysql数据拉入单独的列

[英]how do i pull mysql data with case statements into separate columns

我的表如下:

销售:客户编号,发票,销售日期,金额
日记帐:参考,日期,类型,金额
客户:customerid,customername

我需要从该表中提取数据并以以下格式显示:

customer name  | jan sales| feb sales| march sales| april sales|

等等

我正在尝试以下查询:

     SELECT
    customers.customername AS customer_name,
    CASE WHEN EXTRACT(MONTH FROM journal.date) = 1 THEN SUM(journal.amount) AS january_sales ELSE 0 END,
    CASE WHEN EXTRACT(MONTH FROM journal.date) = 1 THEN SUM(journal.amount) AS feb_sales ELSE 0 END,
    CASE WHEN EXTRACT(MONTH FROM journal.date) = 1 THEN SUM(journal.amount) AS march_sales ELSE 0 END
        FROM customers
        JOIN sales ON sales.customerid = customers.customerid
        JOIN journal ON journal.reference = sales.invoice
        WHERE
        journal.type = 'sale' AND
        journal.date BETWEEN '2013-01-01' AND '2013-03-31' GROUP BY
        customers.customername

我无法使该查询正常工作。 任何帮助表示赞赏。

SUM使用CASE

SELECT 
  customers.customername AS customer_name,
  SUM(
    CASE
      WHEN EXTRACT(MONTH FROM journal.date) = 1 
      THEN journal.amount 
      ELSE 0 
    END
  ) AS january_sales,
  SUM(
    CASE
      WHEN EXTRACT(MONTH FROM journal.date) = 1 
      THEN journal.amount 
      ELSE 0 
    END
  ) AS feb_sales,
  SUM(
    CASE
      WHEN EXTRACT(MONTH FROM journal.date) = 1 
      THEN journal.amount 
      ELSE 0 
    END
  ) AS march_sales 
FROM
  customers 
  JOIN sales 
    ON sales.customerid = customers.customerid 
  JOIN journal 
    ON journal.reference = sales.invoice 
WHERE journal.type = 'sale' 
  AND journal.date BETWEEN '2013-01-01' 
  AND '2013-03-31' 
GROUP BY customers.customername 

我认为这是您想要的:

 SELECT c.customername AS customer_name,
        sum(CASE WHEN month(j.date) = 1 THEN j.amount end) AS january_sales,
        sum(CASE WHEN month(j.date) = 2 THEN j.amount end) AS feb_sales,
        sum(CASE WHEN month(j.date) = 3 THEN j.amount end) AS march_sales
 FROM customers c JOIN
      sales s
      ON s.customerid = c.customerid JOIN
      journal j
      ON j.reference = s.invoice
 WHERE
    j.type = 'sale' AND
    j.date BETWEEN '2013-01-01' AND '2013-03-31'
  GROUP BY c.customername;

您的case陈述书被弄糟了。 例如,它在语句内部而不是后面具有列别名。 我进行了其他一些更改。 我认为month()extract(month)容易extract(month)一种观点,因为后者是ANSI标准)。 我还添加了表别名,以使查询更易于阅读。

请注意,如果查询范围超过12个月,则可能应查看年份值和月份。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM