我想得到这样的东西:
*Customer *2009 *2010 *
|------------|---------|--------|
|Peter |120 |240 |
|Johe |455 |550 |
我的第一个查询方法是:
Select c.name, sum(o2009.price), sum(o2010.price) from customer c
join orders o2009 on (o2009.customerId = c.id AND o2009.year = 2009)
join orders o2010 on (o2010.customerId = c.id AND o2010.year = 2010)
group by c.id
不幸的是,这是完全错误的。我想我可以运行2个查询然后构建一个联合,但也许有更简单的东西?
答案 0 :(得分:4)
只需修改其中一个答案即可获得没有订单的客户 -
Select c.name,
Sum(Case When o.year == 2008 Then price Else 0 End) cy2008,
Sum(Case When o.year == 2009 Then price Else 0 End) cy2009,
Sum(Case When o.year == 2010 Then price Else 0 End) cy2010
From Customers c left outer join
Orders o on o.customer_id = c.customer_id
Group By c.name
答案 1 :(得分:1)
不建议使用子查询,
但应该解决这个问题
,例如
SELECT
c.name,
(
SELECT
ISNULL(SUM(o2009.price), 0)
FROM orders as o2009
WHERE
o2009.year=2009 AND o2009.customerId=c.id
) as sum_2009,
(
SELECT
IFNULL(SUM(o2010.price), 0)
FROM orders as o2010
WHERE
o2009.year=2010 AND o2010.customerId=c.id
) as sum_2010
FROM customer c
请务必检查查询费用
答案 2 :(得分:0)
如果你select c.name, o.year, sum(o.price) from customer as c inner join orders as o on o.customerId = c.id group by c.id, o.year
,你可以获得一些可用的东西,但不是你想要的格式。
答案 3 :(得分:0)
试试这个:
Select c.name,
Sum(Case When o2008.year == 2009 Then price Else 0 End) cy2008,
Sum(Case When o2009.year == 2009 Then price Else 0 End) cy2009,
Sum(Case When o2010.year == 2009 Then price Else 0 End) cy2010
From Orders o
Group By`enter code here` c.Name