我有一个表传递管理,有传递状态“已传递”和“待定”。我要每个人的总记录数。我需要以下格式的答案
|Deliverd | Pending|
-------------------|
| 0 | 9 |
-------------------
我试图通过以下查询,但没有得到我想要的结果。
SELECT (SELECT COUNT(*) FROM fm_delivery_management WHERE status=0)
AS Deliverd, (SELECT COUNT(*)
FROM fm_delivery_management
WHERE status=1) AS Pending
FROM fm_delivery_management
通过这个查询,我得到以下结果
|Deliverd|Pending|
------------------
| 0 | 9 |
| 0 | 9 |
| 0 | 9 |
| 0 | 9 |
| 0 | 9 |
| 0 | 9 |
| 0 | 9 |
| 0 | 9 |
| 0 | 9 |
2条答案
按热度按时间km0tfn4u1#
删除查询末尾的“from fm\u delivery\u management”。否则,它将对该表的所有记录(行)重复。只是使用
093gszye2#
在sql中,数据应该是标准化的结构,因为它使查询更加简单。你的例子的标准化结果将由。。。
这种格式意味着,如果开始使用任何新的状态,它会立即包含在结果中,而不会对代码进行任何更改。
如果你把它作为一个函数,它也会被你将来可能编写的其他代码重用。
它是简短、快速、可维护、适应性强、可重用和惯用的sql。
人们经常试图强迫sql创建像您这样的数据透视结果。这很容易做到,我将在下面举一个例子。但这通常是个坏主意。数据透视和格式化通常不属于sql。从软件开发的Angular 来看,它使代码不那么通用,通常更长,更难维护或调整,通常更慢,而且总体上更糟。
如果您真的必须用不好的方法来做,那么您不需要嵌套的子查询。只需使用case语句过滤您正在聚合的内容。