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

时间:2015-06-22 17:34:25

标签: mysql sql

我遇到一个问题,一列一行,并计算每列中所有非空值的计数。我认为问题是如何获取列名称。在我尝试选择每列中的所有值的最后一个select语句中,我只是获取列名称的行数。关于如何解决这个问题的任何想法?

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;

2 个答案:

答案 0 :(得分:1)

选择@variable只会返回一个变量值。您需要使用一些我相信的动态SQL。也许像exec一样smth(&#39; select&#39; + @colname +&#39;来自&#39;等)将适合你(至少它可以在MS SQL服务器中工作)。

答案 1 :(得分:0)

不完全确定,但为什么你不能直接做

SELECT column1, column2,column3
    FROM [mySchema].[dbo].[tblName]
    WHERE column1 is not null
    AND column2 is not null
    AND column3 is not null