前几天我问了一个类似的问题,但似乎没人能回答,在网上搜索了几天,但还是没有结果,也许我问得不对:One-to-many Query in MySQL
所以我会再试一次,也许会说得有点不同。这基本上是我要做的事情的一个简化版本:

CREATE TABLE Customer(
customer_id INT NOT NULL,
first_name varchar(20),
last_name varchar(20)
);
CREATE TABLE Payment(
customer_id INT NOT NULL,
amount_paid INT,
year YEAR,
FOREIGN KEY (customer_id) REFERENCES Customer(customer_id)
);

我想要的是将左边的名字组织起来,只出现一次,然后每年在单独的列中列出付款金额,因为我将把它附加到WPF中,并且我想要数据的电子表格样式表示。所以,理想的情况是这样的:
name 2009 2008 2007
John 500 600 NULL
Anne NULL 500 600
Bob NULL NULL 600

我的方法是计算不同的付款年数,并将其用作循环计数器。然后循环收集每年的数据。表示每年支付的金额的每一列。我不仅不知道如何做到这一点,因为我最初的方法是使用UNION,但后来我意识到,只需将所有内容放在同一列,而不是单独列。那我该用什么呢?我只是想得到一些指导。谢谢您!

最佳答案

使用:

  SELECT c.first_name,
         MAX(CASE WHEN p.year = 2009 THEN c.amount_paid ELSE NULL END) AS 2009,
         MAX(CASE WHEN p.year = 2008 THEN c.amount_paid ELSE NULL END) AS 2008,
         MAX(CASE WHEN p.year = 2007 THEN c.amount_paid ELSE NULL END) AS 2007
    FROM CUSTOMER c
    JOIN PAYMENT p ON p.customer_id = c.customer_id
GROUP BY c.first_name

08-26 18:33