SQL - 仅从表中获取并非所有值都是空值的列

     2023-05-09     117

关键词:

【中文标题】SQL - 仅从表中获取并非所有值都是空值的列【英文标题】:SQL - get only colums from a table where not all values are nulls 【发布时间】:2018-09-20 11:57:55 【问题描述】:

SQL 问题: 如何从并非所有值都为空的列中获取所有列值?

表 A

COL1    COL2    COL3    COL4    COL5
---------------------------------------
abc     1       NULL    NULL    NULL
def     2       NULL    testA   NULL
NULL    3       NULL    testB   NULL
jkl     4       NULL    NULL    NULL

我想得到

COL1    COL2    COL4    
-----------------------
abc     1       NULL    
def     2       testA   
NULL    3       testB   
jkl     4       NULL    

是否有 sql 或 plsql 解决方案来实现这一点? 为了避免不相关的答案:假设我有一百万行。 我希望结果是视图或结果表。 不是书面输出。

我发现了一个类似的问题,但它不能满足我的需要: How to select columns from a table which have non null values?

通过这个查询可以快速抓取列名

select column_name 
from all_tab_columns 
where lower(table_name)='tableA' and num_distinct > 0;

我知道我可以创建一个带有光标的脚本,然后循环遍历它,将结果添加到新表或视图中。 这不是我需要的。我想知道这是否可以使用单个查询、使用 pivot/unpivot 或其他方法来完成。

【问题讨论】:

请不要使用不适用于您的问题的标签。我删除了数据库标签,因为不清楚您实际使用的是哪一个。请添加only你实际使用的数据库的标签 所以你想要根据表数据不同的列数?好吧,SQL 不是这样工作的,结果集列是在编译时定义的,在读取任何数据之前。 【参考方案1】:

您所要求的在普通 SQL 中是不可能的,除非您提前知道哪些列处处只有 NULL。 (看来你不想假设你知道这一点。)

输出中包含哪些列 - 有多少列、它们的名称以及它们出现的顺序 - 必须在 SELECT 子句中硬编码,无法在运行时确定。另一方面,只有在读取数据后(即在运行时),您才会知道哪些列全为 NULL - 否则您必须从外部来源获得该信息。

执行您似乎想做的事情的唯一方法是使用动态 SQL。这是一个高级主题,也是一种通常被认为是糟糕的商业实践的技术。

为什么不希望显示具有全 NULL 值的列?你确定这个要求有意义吗?

【讨论】:

至于原因:想象一个包含 7000 个表的遗留数据库,其中一些表未规范化。某些区域缺乏数据库模型迫使我们对它们的设置方式进行逆向工程。仅在可见屏幕上获取相关数据,将有助于我们更快地获得此概览。我们不会在生产或应用程序中使用此查询,但我们希望将这些作为工具提供给我们的支持人员。【参考方案2】:

尝试这些步骤,可能会有所帮助:

Create table temp as (Select * from TableA)

Declare NbrRows Number(10);
plsql_block VARCHAR2(1000);
CountNullRows Number (10)

Select count(*) as nbr 
into NbrRows
from TableA

Select count(COL1) as nbr
into CountNullRows
from TableA where COL1 is null

if (NbrRows = CountNullRows) then
Alter table Temp drop column COL1
endif

Select count(COL2) as nbr
into CountNullRows
from TableA where COL2 is null

if (NbrRows = CountNullRows) then
Alter table Temp drop column COL2
endif

Select count(COL3) as nbr
into CountNullRows
from TableA where COL3 is null

if (NbrRows = CountNullRows) then
Alter table Temp drop column COL3
endif

...etc...

对所有列执行相同的操作

你在 Tem 表中有想要的结果。

【讨论】:

如何获取sql中给定行具有空值的列数?

】如何获取sql中给定行具有空值的列数?【英文标题】:Howtogetcountofcolumnsthatarehavingnullvaluesforagivenrowinsql?【发布时间】:2020-09-1512:26:40【问题描述】:我有一个有115列的表。在7列中,我需要获取给定行的非空值的列数。【问题... 查看详情

如何在 QT C++ 中从表的列中获取 SQL 中的所有值

】如何在QTC++中从表的列中获取SQL中的所有值【英文标题】:HowtogetallvaluesinSQLfromatable\'scolumn,inQTC++【发布时间】:2022-01-1902:37:54【问题描述】:所以我正在尝试使用C++(11)从QT中的sqlite3数据库中获取所有值。我的表名为“Auteurs”... 查看详情

由于外键为空值,无法从表中获取数据

】由于外键为空值,无法从表中获取数据【英文标题】:Notgettingdatafromatablebecauseofnullvalueofforeignkey【发布时间】:2019-05-1712:59:43【问题描述】:我正在使用mysql数据表和SQL查询来获取数据,我从通过一对多和多对一关系连接的两... 查看详情

仅从连接表中获取指定的列

】仅从连接表中获取指定的列【英文标题】:getonlyspecifiedcolumnsfromthejointable【发布时间】:2016-02-2502:08:26【问题描述】:首先我有这个“用户”模型<?phpnamespaceApp;useIlluminate\\Auth\\Authenticatable;useIlluminate\\Database\\Eloquent\\Model;useIll... 查看详情

SQL 从表中选择并获取表名

】SQL从表中选择并获取表名【英文标题】:SQLselectfromtableandgettablename【发布时间】:2014-04-0306:05:03【问题描述】:我喜欢三个表,它们有一些相同的列,如ID、名称、图像、...我正在使用此代码从中选择(SELECTID,NameFROM`creatures`WHERE... 查看详情

如何使用 PL/SQL 获取表中所有非空列的计数?

】如何使用PL/SQL获取表中所有非空列的计数?【英文标题】:Howtogetcountofallcolumnsofatable,whicharenotnullusingPL/SQL?【发布时间】:2014-07-1419:28:18【问题描述】:是否有任何PL/SQL函数,它允许传递表名并返回不包含空值的所有列的计数... 查看详情

EF - 从表中获取数据给出空值

】EF-从表中获取数据给出空值【英文标题】:EF-gettingdatafromtablegivesnullvalue【发布时间】:2021-11-2917:17:03【问题描述】:我正在尝试使用实体框架从MySQL数据库中获取数据。这是我的代码:publicIActionResultGetPersons()using(_context)varp=_co... 查看详情

在每个数据库的表中查找具有空值的列[关闭]

】在每个数据库的表中查找具有空值的列[关闭]【英文标题】:Findingcolumnswithnullvaluesintableforeachdatabase[closed]【发布时间】:2018-02-2812:38:17【问题描述】:我有一个表,其中包含Databasename、tablename、columnname、query等列。但在查询列... 查看详情

sql选择仅包含空值的列(代码片段)

查看详情

使用休眠仅从对象中的表中获取选定的列

】使用休眠仅从对象中的表中获取选定的列【英文标题】:Getonlyselectedcolumnsfromtableinobjectusinghibernate【发布时间】:2014-05-0917:05:00【问题描述】:我正在使用休眠进行数据库通信。我有一堂课:@Table(name="Person")publicclassPerson@Column(... 查看详情

SQL Server 2008 仅从字段中选择日期 [重复]

】SQLServer2008仅从字段中选择日期[重复]【英文标题】:SQLServer2008selectdateonlyfromfield[duplicate]【发布时间】:2014-11-1200:57:32【问题描述】:我有一个表格,列中有日期和时间。我只需要从名为last_date的列中选择日期部分。我看到了... 查看详情

Spark 仅获取具有一个或多个空值的列

】Spark仅获取具有一个或多个空值的列【英文标题】:SparkGetonlycolumnsthathaveoneormorenullvalues【发布时间】:2018-01-1511:07:16【问题描述】:我想从数据框中获取至少包含一个空值的列的名称。考虑下面的数据框:valdataset=sparkSession.cre... 查看详情

检查后从表中返回值的 PL/SQL 函数

】检查后从表中返回值的PL/SQL函数【英文标题】:PL/SQLfunctionthatreturnsavaluefromatableafteracheck【发布时间】:2013-03-0221:01:08【问题描述】:我是php和sql的新手,我正在开发一个小游戏来学习更多后者的知识。这是我的三个表的简单... 查看详情

DeltaLake 合并具有空值的列

...【问题描述】:我正在使用DeltaLakeAPI使用下面的代码更新表中的行DeltaTable.forPath(sparkSession,cleanDataPath).as("target").merge(df.as("source"),"target.desk_mir 查看详情

如何获取数据集中具有空值的列的总数? [复制]

】如何获取数据集中具有空值的列的总数?[复制]【英文标题】:HowcanIgetthetotalcountsofcolumnsinaDatasethavingnullvalues?[duplicate]【发布时间】:2020-09-2920:33:30【问题描述】:假设我有一个包含100列和25列具有一个或多个空值的数据集。我... 查看详情

在表中为每个数据库查找具有空值的列[关闭](代码片段)

...TCOUNT(MachineName)ASCntFROMKeysWHEREMachineName<>NULL。如何使用表中的此查询列执行(我需要执行查询列的剩余3列)任何人都可以帮助我。答案哦,我误解了。您是否正在搜索在查询列中执行查询的查询,并使用数据库中的值替换其... 查看详情

获取两个字段中不为空的那个字段---sql(代码片段)

 方式一COALESCE(Aname,Bname)COALESCE是一个函数,(expression_1,expression_2,...,expression_n)依次参考各参数表达式,遇到非null值即停止并返回该值。如果所有的表达式都是空值,最终将返回一个空值。使用COALESCE在于大部分包含空值的表... 查看详情

sql server 查询 order by 与 union 并替换多个列的空值

...012-09-2809:21:41【问题描述】:我有一个查询要从4个不同的表中获取记录。我正在使用union来获取最终记录。我的问题是我在所有4个表中没有相同数量和类型的列,所以我正在制作具有null值的虚 查看详情