根据以前的查询添加要查询的列

Add columns to query based on previous queries

我有两个 table:

+-----------+
| Customer  |
+-----------+
| ID | Name |
+----+------+
| 1  | Jack |
+----+------+
| 2  | John |
+----+------+

+----------------------------------------+
|                  Bill                  |
+----------------------------------------+
| ID | Customer_ID | date       | amount |
+----+-------------+------------+--------+
| 1  | 1           | 01.01.2015 | 10$    |
+----+-------------+------------+--------+
| 2  | 1           | 01.01.2014 | 20$    |
+----+-------------+------------+--------+
| 3  | 2           | 01.01.2015 | 5$     |
+----+-------------+------------+--------+
| 4  | 2           | 01.02.2015 | 50$    |
+----+-------------+------------+--------+
| 5  | 2           | 01.01.2014 | 15$    |
+----+-------------+------------+--------+

我需要知道客户一年内收到的所有账单的总和。

这很简单:

SELECT 
    SUM(Bill.amount), Customer.Name
FROM 
    Customer 
INNER JOIN 
    Bill ON Customer.ID = Bill.Customer_ID
WHERE 
    Bill.date BETWEEN #20150101# AND #20151231#
GROUP BY 
    Customer.Name

困难的部分是我需要在单个 table 中显示该查询多年的结果,如下所示:

+-------------------------------------------+
|             sales to customer             |
+-------------------------------------------+
| Customer_ID | Customer_Name | 2015 | 2014 |
+-------------+---------------+------+------+
| 1           | jack          | 10$  | 20$  |
+-------------+---------------+------+------+
| 2           | john          | 55$  | 20$  |
+-------------+---------------+------+------+

我正在使用 SQL Server 2005。

我非常感谢每一个答案。

真诚的 安达哈里

使用案例仅对与您的时间段对应的值求和。示例:

SELECT sum(case when Bill.date BETWEEN #20150101# AND #20151231# then Bill.amount else 0 end) as 2015, 
Customer.Name
    FROM Customer INNER JOIN Bill ON Customer.ID = Bill.Customer_ID
    GROUP BY Customer.Name

如前所述,您需要使用 PIVOT 才能获得所需的结果,如下所示:

Select Customer_ID, Customer_Name, [2015], [2014]
from
(select Customer_ID, Name Customer_Name, YEAR(_date) Yr, amount
from Bill b
inner join Customer c on c.ID = b.Customer_ID
) as src
PIVOT
(SUM(amount) for Yr in ([2015],[2014])) as pvt