Legen Sie den Standardwert für das MySQL-Verbindungsintervall Jahr und Monat fest
P粉924915787
P粉924915787 2024-02-25 18:16:02
0
1
350

Es gibt ein Problem mit meiner Anfrage. Ich habe zwei Tabellen und möchte sie verknüpfen, um Ergebnisse basierend auf dem Primärschlüssel der ersten Tabelle zu erhalten, aber mir fehlt ein Datenelement aus der ersten Tabelle.

Das ist meine Geige

Wie Sie sehen, fehlt mir „xx3“ für Monat 1

Ich habe versucht, die linken und rechten Verbindungen zu ändern, aber immer noch das gleiche Ergebnis. Wie Sie sehen, muss ich coalesce(sum(b.sd_qty),0) 设置为总计, 如果没有 qty,则将 0 auf den Standardwert setzen.

P粉924915787
P粉924915787

Antworte allen(1)
P粉287726308

您还应该将表交叉连接到不同的日期:

SELECT a.item_code,
       COALESCE(SUM(b.sd_qty), 0) total,
       DATE_FORMAT(d.sd_date, '%m-%Y') month_year
FROM item a 
CROSS JOIN (
  SELECT DISTINCT sd_date 
  FROM sales_details 
  WHERE sd_date >= '2020-04-01' - INTERVAL 3 MONTH AND sd_date 

或者,对于 MySql 8.0+,使用递归 CTE 返回您想要结果的所有月份的开始日期,可以交叉连接到表:

WITH RECURSIVE dates AS (
  SELECT '2020-04-01' - INTERVAL 3 MONTH AS sd_date
  UNION ALL
  SELECT sd_date + INTERVAL 1 MONTH
  FROM dates 
  WHERE sd_date + INTERVAL 1 MONTH 

查看演示

Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage