Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/290.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何选择值不为零的列_C#_Mysql - Fatal编程技术网

C# 如何选择值不为零的列

C# 如何选择值不为零的列,c#,mysql,C#,Mysql,如何选择值不为零的列 如果我有3列 column1|column2|column3 -------+-------+------- 0 | 50 | 99 我希望查询仅显示值大于0的列 因此,结果将是 column2|column3 -------+------- 50 | 99 我试过这个: SELECT * FROM `table1` WHERE `column1` != '0' SQL返回数据表。表的每一行都有相同的列。不能有行中缺少列的查询

如何选择值不为零的列

如果我有3列

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-非常正确。但对于开发者来说,这是一个常见的位置,他们没有选择改变遗留数据库。对奇怪问题的创造性回答是如此宝贵资源的重要组成部分。