首先,我为可怕的措辞道歉,但我不确定如何描述我正在做的事情......
我有一个计算机类型表(id,type,name),名为com_types
id | type | name
1 | 1 | Dell
2 | 4 | HP
在第二个表格中,我有每台计算机,其中包含一列' type_id'表示它是什么类型的计算机,称为com_assets
id | type_id | is_assigned
1 | 4 | 0
2 | 1 | 1
我想创建一个显示每种计算机类型的视图,以及我们手头和使用的数量以及总数,因此结果将是
id | type | name | on_hand | in_use | total |
1 | 1 | Dell | 0 | 1 | 1 |
2 | 4 | HP | 1 | 0 | 1 |
如您所见,on_hand,in_use和total列依赖于第二个表中的type_id和is_assigned列。
到目前为止,我已经尝试过这个......
CREATE VIEW test AS
SELECT id, type, name,
( SELECT COUNT(*) FROM com_assets WHERE type_id = id AND is_assigned = '0' ) as on_hand,
( SELECT COUNT(*) FROM com_assets WHERE type_id = id AND is_assigned = '1' ) as in_use,
SUM( on_hand + in_use ) AS total
FROM com_types
但是所有这些返回的是一列具有所有正确值,除了总数等于另一个表中的所有计算机。我需要一个触发器吗?
答案 0 :(得分:2)
on_hand
是assigned = 0
的计数,in_use
是assigned = 1
的计数。您可以将它们统计在一起,而不需要相关的子查询,如下所示:
SELECT
com_types.id,
com_types.type,
com_types.name,
COUNT(CASE WHEN com_assets.is_assigned = 0 THEN 1 END) AS on_hand,
COUNT(CASE WHEN com_assets.is_assigned = 1 THEN 1 END) AS in_use,
COUNT(*) AS total
FROM com_types
JOIN com_assets ON com_types.id = com_assets.id
GROUP BY
com_types.id,
com_types.type,
com_types.name