我有有制造商的车间,一个车间可以有很多制造商,但只有一个官员。我想要所有有制造商22的车间,但如果他们有相同的增值税,只得到工厂谁是官方的。
我有两张桌子,第一次工作坊
id | name | vat
-------------------------
1 | name 1 | B12
2 | name 2 | B12
3 | name 3 | B12
4 | name 4 | E98
5 | name 5 | A99
二次workshop_manufacturer
id | workshop_id | manufacturer_id | official
----------------------------------------------
1 | 1 | 22 | 0
2 | 2 | 22 | 0
3 | 3 | 22 | 1
4 | 4 | 22 | 0
5 | 5 | 22 | 1
5 | 5 | 23 | 0
5 | 5 | 24 | 0
我想得到独特的车间(集团的增值税),但我想得到一个正式的一个(official=1),如果有许多车间与同一缸谁与该制造商工作。
如果我执行此查询:
SELECT t1.*,t2.* FROM workshop t1
INNER JOIN workshop_manufacturer t2 ON t1.id=t2.workshop_id
WHERE t2.manufacturer.id = 22
GROUP bY t1.vat
我明白了:
id | name | vat | official | manufacturer_id
-----------------------------------------------
1 | name 1 | B12 | 0 | 22
4 | name 4 | E98 | 0 | 22
5 | name 5 | A99 | 1 | 22
我想要这个:
id | name | vat | official | manufacturer_id
-----------------------------------------------
3 | name 3 | B12 | 1 | 22
4 | name 4 | E98 | 0 | 22
5 | name 5 | A99 | 1 | 22
所有的工作坊都是官方和非官方的,但优先考虑的是那些正式的。
发布于 2016-12-10 16:54:20
这是一种优先排序,而不是聚合。但这相当复杂。
以下是每个“vat”研讨会的ids:
select w.vat, max(case when w.official = 1 then w.id end) as official_id,
max(w.id) as max_id
from workshop_manufacturer wm join
workshop w
on w.id = wm.workshop_id
group by w.vat;
有两个id,一个是可用的official
,另一个是最大id。
现在,您可以在join
中使用它来获取其余字段:
select w.workshop_id, w.name, w.vat,
(official_id is not null) as official
from (select w.vat, max(case when w.official = 1 then w.id end) as official_id,
max(w.id) as max_id
from workshop_manufacturer wm join
workshop w
on w.id = wm.workshop_id
group by w.vat
) v join
workshop w
on w.id = coalesce(official_id, max_id);
发布于 2016-12-10 16:47:33
尝尝这个。
SELECT t1.*,t2.* FROM workshop t1
INNER JOIN workshop_manufacturer t2 ON t1.id=t2.workshop_id
GROUP bY t1.vat having t2.official = 1
https://stackoverflow.com/questions/41077817
复制相似问题