使用子查询中的select参数作为列值

时间:2017-04-27 17:39:45

标签: tsql

我试图根据临时表动态设置columnName,databaseName,schemaName等,但似乎无法使其正常工作。我在下面尝试过?

Create Table #test(databaseName varchar(128), schemaName varchar(128), columnName varchar(128), datatypeName varchar(128));

INSERT INTO #test ('testDatabase', 'testSchema', 'testTable', 'priceColumn');

SELECT
Case
    WHEN DataType = 'int'
    THEN SELECT MAX(ColumnName) FROM Concat(databaseName, '.', schemaName, '.', tableName)
    ELSE 0
end
FROM #test;

DROP TABLE #test;

预期的结果是,下面的子查询占用#test表中行中的每一行,然后根据这些值进行查询,以便从该表返回maxPrice

SELECT MAX(ColumnName) FROM Concat(databaseName, '.', schemaName, '.', tableName)

1 个答案:

答案 0 :(得分:0)

您是否尝试在保留查询流的同时在计算字段上进行汇总?

你可以尝试这样的事情。

SELECT 
    MAX(FullName)
FROM
(
    SELECT
         FullName = databaseName+ '.' + schemaName + '.' + columnName,
         *
    FROM
        @test
) AS A
WHERE
    DataTypeName='int'

另一个例子

SELECT 
    MAX(FullNameInt),
    MAX(FullNameOther)
FROM
(
    SELECT
        FullNameInt   = CASE WHEN DataTypeName='int' THEN  databaseName+ '.' + schemaName + '.' + columnName ELSE NULL END,
        FullNameOther = CASE WHEN DataTypeName<>'int' THEN databaseName+ '.' + schemaName + '.' + columnName ELSE NULL END,
         *
    FROM
        @test
) AS A