我需要弄清如何基于不在数据库中的条件来静态输出行。
示例数据库:
+ -------+-------+ | STATUS | SUM | + -------+-------+ | P | 1,000 | | E | 5,000 | + -------+-------+
所需的输出
+ -------+-------+ | STATUS | SUM | + -------+-------+ | P | 1,000 | | E | 5,000 | | N | 0 | + -------+-------+
基本上-如果“ N”不在数据库中,我需要输出N状态总和为0的行。之所以需要这样做是因为以后要格式化。这是关于文件处理数据的,尽管有些月份的文件可能处于P,E和N这三种状态,但其他月份的文件可能只有P和E。无论月份如何,我都需要一致的输出。
答案 0 :(得分:2)
假设两栏分别是“状态”和“总和”;
SELECT [Status], [SUM]
FROM YOURTABLE
UNION
SELECT 'N' AS [Status], 0 AS [SUM]
答案 1 :(得分:0)
我强烈建议您避免对SQL查询中的静态行进行硬编码,而是创建一个单独的表,其中包含每种状态的“默认”值,例如:
+ -------+-------+
| STATUS | SUM |
+ -------+-------+
| P | 0 |
| E | 0 |
| N | 0 |
+ -------+-------+
然后,您可以使用LEFT JOIN
构造查询,以始终包含该状态表中的所有记录,例如:假设默认表名为MyDefaults
,而数据表名为{{1} }:
MyTable
答案 2 :(得分:0)
在我看来,您希望在该表的列上使用SUM
,假设它的名称为COLUMN_NAME
,并且该表的名称为TABLE_NAME
。
如果是这种情况,那么您必须对表进行加总运算,并在两行中包含包含值'N'
和'0'
的行。
这样可以确保'N'
会出现在最终结果中,即使已经存在0
也不会因为SELECT STATUS, SUM(COLUMN_NAME)
FROM (SELECT STATUS, COLUMN_NAME FROM TABLE_NAME UNION SELECT 'N', 0)
GROUP BY STATUS
而损害最终金额:
@receiver(post_save,sender=Data)
def on_batch_child_saving(sender,instance,**kwargs):
batch_instance = Batch.objects.get(pk=instance.batch)
if (instance.timestamp < batch_instance.start):
batch_instance.start = instance.timestamp
batch_instance.save()
elif (instance.timestamp > batch_instance.end):
batch_instance.end = instance.timestamp
batch_instance.save()