mysql - 从表中的所有列中选择所有非空值

标签 mysql sql

我在逐列浏览并获取每列中所有非空值的计数时遇到问题。我认为问题是我如何获取列名称。在最后一个选择语句中,我试图选择每列中的所有值,我只是获取与行数一样多的列名称。知道如何解决这个问题吗?

DECLARE @cnt INT = 1;

WHILE @cnt < (SELECT COUNT(*)
                FROM mySchema.INFORMATION_SCHEMA.COLUMNS
                WHERE table_name = 'tblName') + 1
BEGIN
    DECLARE @column varchar(9) = (select column_name
    FROM mySchema.INFORMATION_SCHEMA.COLUMNS
    WHERE table_name = 'tblName'
    AND ordinal_position = @cnt);

    SELECT @column 
        FROM [mySchema].[dbo].[tblName]
        WHERE @column is not null
        AND @column <> ''

        SET @cnt = @cnt + 1;
    END;

最佳答案

select @variable 只会返回一个变量值。我相信你需要使用一些动态 SQL。也许像 exec('select ' + @colname + ' from ' etc) 这样的东西会为你工作(至少它会在 MS SQL Server 中工作)。

关于mysql - 从表中的所有列中选择所有非空值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30986307/

相关文章:

php - 更新时在数据库中保留值

mysql - SQL : Write a query that given a varchar, 查找是否存在于A列或B列中

sql - 将不在聚合函数中的列保留在 group by 语句中

sql - T-SQL,将 XML 数据加载到局部变量中

sql - SELECT 子句使用 IN ... 很慢?

php - 简单的登录表单 php 需要帮助

java - Spring JDBC - 无法连接到数据库

mysql - 如何从MySQL数据库中获取数据到Excel中

mysql - 无法将外键约束添加为 GUID

sql - 数据库设计 : why use an autoincremental field as primary key?