如何基于条件在SQL中输出静态行

如何基于条件在SQL中输出静态行,sql,Sql,我需要弄清楚如何基于一个条件静态地输出一行,即该行不在数据库中 示例数据库: + -------+-------+ | STATUS | SUM | + -------+-------+ | P | 1,000 | | E | 5,000 | + -------+-------+ + -------+-------+ |地位|总和| + -------+-------+ |P | 1000| |E | 5000| + -------+-------+ 所需输出 + ---

我需要弄清楚如何基于一个条件静态地输出一行,即该行不在数据库中

示例数据库:

+ -------+-------+ | STATUS | SUM | + -------+-------+ | P | 1,000 | | E | 5,000 | + -------+-------+ + -------+-------+ |地位|总和| + -------+-------+ |P | 1000| |E | 5000| + -------+-------+ 所需输出

+ -------+-------+ | STATUS | SUM | + -------+-------+ | P | 1,000 | | E | 5,000 | | N | 0 | + -------+-------+ + -------+-------+ |地位|总和| + -------+-------+ |P | 1000| |E | 5000| |N | 0| + -------+-------+
基本上-如果“N”不在数据库中,我需要输出一个状态为N且总和为0的行。我需要这样做的原因是为了以后格式化。这是关于文件处理数据的,虽然某些月份的文件可能全部处于P、E和N三种状态,但其他月份可能只有P和E。我需要一致的输出,无论是哪个月份。

假设两列是“状态”和“总和”


我强烈建议避免对SQL查询中的静态行进行硬编码,而是创建一个单独的表,其中包含每个状态的“默认”值,例如:

+-------+-------+
|地位|总和|
+ -------+-------+
|P | 0|
|E | 0|
|N | 0|
+ -------+-------+
然后,您可以使用
左联接构建一个查询,以始终包含此状态表中的所有记录,例如:假设默认值表名为
MyDefaults
,数据表名为
MyTable

选择
我的身份,
合并(MyTable.SUM,MyDefaults.SUM)为[SUM]
从…起
MyDefaults在MyDefaults.STATUS=MyTable.STATUS上左键连接MyTable

在我看来,您似乎希望此表的列上有
总和
,假设其名称为
列\名称
,而该表的名称为
表\名称

如果出现这种情况,则必须在表上加上一行,该行包含两列的值
'N'
'0'

这确保了最终结果中的
'N'
将在那里,即使它已经存在,也不会因为
0
而损害最终总和:

SELECT STATUS, SUM(COLUMN_NAME) 
FROM (SELECT STATUS, COLUMN_NAME FROM TABLE_NAME UNION SELECT 'N', 0) 
GROUP BY STATUS

您使用的是MySQL、Excel还是Teradata?这里的大多数人希望数据是格式化文本,而不是图像(或图像链接)。对于数据库,您指的是表?所以在关系数据库(MySQL或Teradata)中有一个表,它有两列,
status
sum
?如果是这样,您应该重命名
sum
列,因为
sum
在SQL中是一个保留字。你说的是月份,所以表中也有一个日期或某个月份列?然后展示它。然后,您希望查询检索一个月还是几个月?请用表格和结果的文本表示替换图像链接。您可能会得到另一个带有这3个stati的表格(如果没有,请创建它)。然后是一个简单的左连接。@courthale。我删除了不兼容的数据库标记。请只标记您真正使用的数据库。OP中提到了MySQL、Excel和Teradata。我们不知道这些产品的要求是真正的。如果我没弄错的话,你的查询对这些都不起作用。这是T-SQL吗?是的,这是TSQL,这是无用的,您需要提前知道没有状态为
N
的行。
SELECT STATUS, SUM(COLUMN_NAME) 
FROM (SELECT STATUS, COLUMN_NAME FROM TABLE_NAME UNION SELECT 'N', 0) 
GROUP BY STATUS