Select 来自相同 table 的相同列,具有不同的 WHERE 条件
Select the same column from same table with different WHERE conditions
我有两个table:
第一 table:PATIENT
列:
ID number(PK), LastName varchar2, FirstName varchar2
和示例数据:
ID LastName FirstName
-------------------------
1 Jobs Tom
2 Norks Jack
3 Loonie Peter
第二 table:PAYMENTS
列:
ID number(PK), PATIENT_ID number (FK Patient.ID), PRICE number,
EXTRA_PAYMENT number (takes only 0 or -1)
和示例数据:
ID PATIENT_ID PRICE EXTRA_PAYMENT
----------------------------------------
1 1 50€ 0
2 1 20€ 0
3 3 40€ 0
4 1 30€ 0
5 2 70€ 0
6 3 25€ 0
7 2 5€ -1
8 3 25€ 0
9 2 10€ -1
10 2 50€ 0
我想对 return 这 3 列创建查询:
PATIENT PRICE EXTRA_PRICE
--------------------------------------------
Tom Jobs 100€ 0€
Jack Norks 120€ 15€
Peter Loonie 90€ 0€
我该怎么做?
您可以在连接表后使用聚合:
select p.firstname || ' ' || p.lastname as patient,
sum(pm.price * pm.extra_price) as price,
sum(pm.price * (1 - pm.extra_price)) as extra
from patients p left join
payments pm
on p.id = pm.patient_id
group by p.id, p.firstname || ' ' || p.lastname;
编辑:
对于已更改的问题,您可以使用case
:
select p.firstname || ' ' || p.lastname as patient,
sum(case when pm.extra_price = 0 then pm.price end) as price,
sum(case when pm.extra_price = -1 then pm.price end) as extra
from patients p left join
payments pm
on p.id = pm.patient_id
group by p.id, p.firstname || ' ' || p.lastname;
我有两个table:
第一 table:PATIENT
列:
ID number(PK), LastName varchar2, FirstName varchar2
和示例数据:
ID LastName FirstName
-------------------------
1 Jobs Tom
2 Norks Jack
3 Loonie Peter
第二 table:PAYMENTS
列:
ID number(PK), PATIENT_ID number (FK Patient.ID), PRICE number,
EXTRA_PAYMENT number (takes only 0 or -1)
和示例数据:
ID PATIENT_ID PRICE EXTRA_PAYMENT
----------------------------------------
1 1 50€ 0
2 1 20€ 0
3 3 40€ 0
4 1 30€ 0
5 2 70€ 0
6 3 25€ 0
7 2 5€ -1
8 3 25€ 0
9 2 10€ -1
10 2 50€ 0
我想对 return 这 3 列创建查询:
PATIENT PRICE EXTRA_PRICE
--------------------------------------------
Tom Jobs 100€ 0€
Jack Norks 120€ 15€
Peter Loonie 90€ 0€
我该怎么做?
您可以在连接表后使用聚合:
select p.firstname || ' ' || p.lastname as patient,
sum(pm.price * pm.extra_price) as price,
sum(pm.price * (1 - pm.extra_price)) as extra
from patients p left join
payments pm
on p.id = pm.patient_id
group by p.id, p.firstname || ' ' || p.lastname;
编辑:
对于已更改的问题,您可以使用case
:
select p.firstname || ' ' || p.lastname as patient,
sum(case when pm.extra_price = 0 then pm.price end) as price,
sum(case when pm.extra_price = -1 then pm.price end) as extra
from patients p left join
payments pm
on p.id = pm.patient_id
group by p.id, p.firstname || ' ' || p.lastname;