簡體   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