Sql 从元组中选择非空的列
想象一下,如果我们有一张桌子: 我是否可以编写一个SQL查询来给出以下结果,其中我可以得到不为null的列: | col1 | val1 | val5 | ---------------------- | A | 1 | 1 |Sql 从元组中选择非空的列,sql,null,Sql,Null,想象一下,如果我们有一张桌子: 我是否可以编写一个SQL查询来给出以下结果,其中我可以得到不为null的列: | col1 | val1 | val5 | ---------------------- | A | 1 | 1 | 而不是使用单独的函数来做同样的事情 答案是否定的,不是在标准SQL中。select语句指定返回的特定列。不能更改列数 一种选择是切换到动态SQL,在动态SQL中,您将查询创建为字符串,然后执行该字符串。这种方法高度依赖于数据库 另一种选择是将所有值分组
而不是使用单独的函数来做同样的事情 答案是否定的,不是在标准SQL中。select语句指定返回的特定列。不能更改列数 一种选择是切换到动态SQL,在动态SQL中,您将查询创建为字符串,然后执行该字符串。这种方法高度依赖于数据库 另一种选择是将所有值分组到一个列中,使用类似listag的内容。您的评论表明您正在使用Oracle
如果还需要非空的列名,可以使用listag和一个巨型case语句来实现。或者,您可以取消抽取数据以获得名称-值对,然后使用listagg重新聚合。答案是否,而不是在标准SQL中。select语句指定返回的特定列。不能更改列数 一种选择是切换到动态SQL,在动态SQL中,您将查询创建为字符串,然后执行该字符串。这种方法高度依赖于数据库 另一种选择是将所有值分组到一个列中,使用类似listag的内容。您的评论表明您正在使用Oracle
如果还需要非空的列名,可以使用listag和一个巨型case语句来实现。或者,您可以取消激活数据以获得名称-值对,然后使用ListAg重新聚合。您没有指定正在使用的RDBMS,但可以取消激活数据以返回包含非空值的数据。如果没有UNPIVOT函数,则可以使用UNION ALL: 看 如果您有一个带有unpivot函数的RDBMS,那么查询将类似于此:
select col1, col, value
from yourtable
unpivot
(
value
for col in (val1, val2, val3, val4, val5)
) unpiv;
看。数据作为行而不是单独的列返回,但结果是:
| COL1 | COL | VALUE |
-----------------------
| A | val1 | 1 |
| A | val5 | 1 |
| B | val2 | 1 |
| B | val4 | 1 |
| C | val1 | 1 |
| C | val3 | 1 |
您没有指定正在使用的RDBMS,但可以取消填充数据以返回包含非空值的数据。如果没有UNPIVOT函数,则可以使用UNION ALL: 看 如果您有一个带有unpivot函数的RDBMS,那么查询将类似于此:
select col1, col, value
from yourtable
unpivot
(
value
for col in (val1, val2, val3, val4, val5)
) unpiv;
看。数据作为行而不是单独的列返回,但结果是:
| COL1 | COL | VALUE |
-----------------------
| A | val1 | 1 |
| A | val5 | 1 |
| B | val2 | 1 |
| B | val4 | 1 |
| C | val1 | 1 |
| C | val3 | 1 |
当然可以:从t中选择col1、val1、val5,其中col1='A'。说真的,应用于表以获得结果的规则是什么?为什么不返回B行和C行?为什么需要这样做?您不需要说明RDBMS,但它可能需要一个查询来确定包含NOTNULL的列,然后需要一个单独的动态SQL查询来返回实际结果。我只需要从表中选择col1、val1、val2、val3、val4、val5,并担心DBNull代码端。@DanielHilgarth:thnx作为回复,在这里,我只想选择不为null的列,可以使用简单的PLSQL func执行相同的操作,但想知道是否有办法从SQL查询本身执行此操作。是的,查询将是smthng lyk SELECT FROM table t,其中t.col1='A',您当然可以:从t中选择col1,val1,val5,其中col1='A'。说真的,应用于表以获得结果的规则是什么?为什么不返回B行和C行?为什么需要这样做?您不需要说明RDBMS,但它可能需要一个查询来确定包含NOTNULL的列,然后需要一个单独的动态SQL查询来返回实际结果。我只需要从表中选择col1、val1、val2、val3、val4、val5,并担心DBNull代码端。@DanielHilgarth:thnx作为回复,在这里,我只想选择不为null的列,可以使用简单的PLSQL func执行相同的操作,但想知道是否有办法从SQL查询本身执行此操作。是的,查询将是smthng lyk SELECT FROM table t,其中t.col1='A'像一个符咒一样工作!!!谢谢!!:我并没有完全预料到,但事实证明这对我来说很容易!!工作就像一个魅力!!!谢谢!!:我并没有完全预料到,但事实证明这对我来说很容易!!