C# 如何选择值不为零的列
如何选择值不为零的列 如果我有3列C# 如何选择值不为零的列,c#,mysql,C#,Mysql,如何选择值不为零的列 如果我有3列 column1|column2|column3 -------+-------+------- 0 | 50 | 99 我希望查询仅显示值大于0的列 因此,结果将是 column2|column3 -------+------- 50 | 99 我试过这个: SELECT * FROM `table1` WHERE `column1` != '0' SQL返回数据表。表的每一行都有相同的列。不能有行中缺少列的查询
column1|column2|column3
-------+-------+-------
0 | 50 | 99
我希望查询仅显示值大于0的列
因此,结果将是
column2|column3
-------+-------
50 | 99
我试过这个:
SELECT * FROM `table1` WHERE `column1` != '0'
SQL返回数据表。表的每一行都有相同的列。不能有行中缺少列的查询 因此,如果此select语句:
select column1, column2, column3 from table1
返回
column1 | column2 | column3
1 | 20 | 50
0 | 12 | 2
3 | 15 | 0
10 | 0 | 11
如果我们省略带零的列,您认为第二行的第一列会是什么
你能做的最好的事情就是用NULL替换零
select CASE WHEN column1 > 0 THEN column1 ELSE NULL END,
CASE WHEN column2 > 0 THEN column2 ELSE NULL END,
CASE WHEN column3 > 0 THEN column3 ELSE NULL END
from table1
这将给我们以下信息:
column1 | column2 | column3
1 | 20 | 50
NULL | 12 | 2
3 | 15 | NULL
10 | NULL | 11
SQL返回数据表。表的每一行都有相同的列。不能有行中缺少列的查询 因此,如果此select语句:
select column1, column2, column3 from table1
返回
column1 | column2 | column3
1 | 20 | 50
0 | 12 | 2
3 | 15 | 0
10 | 0 | 11
如果我们省略带零的列,您认为第二行的第一列会是什么
你能做的最好的事情就是用NULL替换零
select CASE WHEN column1 > 0 THEN column1 ELSE NULL END,
CASE WHEN column2 > 0 THEN column2 ELSE NULL END,
CASE WHEN column3 > 0 THEN column3 ELSE NULL END
from table1
这将给我们以下信息:
column1 | column2 | column3
1 | 20 | 50
NULL | 12 | 2
3 | 15 | NULL
10 | NULL | 11
包含列的json字符串是否适用于您的目的
SELECT CONCAT(COALESCE(CASE WHEN column1 > 0 THEN JSON_OBJECT('column1', column1) END, ''),
COALESCE(CASE WHEN column2 > 0 THEN JSON_OBJECT('column2', column2) END, ''),
COALESCE(CASE WHEN column3 > 0 THEN JSON_OBJECT('column3', column3) END, '')
)
FROM table1;
这将返回一个json字符串,其中只包含>0的列。因此,使用您的示例,它将返回{column2:50}{column3:99}包含这些列的json字符串是否适合您的目的
SELECT CONCAT(COALESCE(CASE WHEN column1 > 0 THEN JSON_OBJECT('column1', column1) END, ''),
COALESCE(CASE WHEN column2 > 0 THEN JSON_OBJECT('column2', column2) END, ''),
COALESCE(CASE WHEN column3 > 0 THEN JSON_OBJECT('column3', column3) END, '')
)
FROM table1;
这将返回一个json字符串,其中只包含>0的列。因此,使用您的示例,这将返回{column2:50}{column3:99}SQL中的列列表不能是动态的,至少没有准备好的语句,这不是SQL的工作方式。where子句将只过滤返回的行。必须指定列。你所能做的就是检索所有的值并在代码中处理它们。你只显示了一行数据。如果下一行在column1中设置了一个值,那么预期的输出是什么?我想您已经知道了,但是这种问题是糟糕的模式的高度症状design@Strawberry-非常正确。但对于开发者来说,这是一个常见的位置,他们没有选择改变遗留数据库。对奇怪问题的创造性回答在很大程度上是使SQL成为如此有价值的资源的原因。SQL中的列列表不可能是动态的,至少在没有准备好的语句的情况下是如此。这不是SQL的工作方式。where子句将只过滤返回的行。必须指定列。你所能做的就是检索所有的值并在代码中处理它们。你只显示了一行数据。如果下一行在column1中设置了一个值,那么预期的输出是什么?我想您已经知道了,但是这种问题是糟糕的模式的高度症状design@Strawberry-非常正确。但对于开发者来说,这是一个常见的位置,他们没有选择改变遗留数据库。对奇怪问题的创造性回答是如此宝贵资源的重要组成部分。