Sql where子句中的动态列名和列名

Sql where子句中的动态列名和列名,sql,sql-server,sql-server-2008,Sql,Sql Server,Sql Server 2008,我的查询如下,我有50个组合L1、L2、L3。。L50具有不同的where子句和不同的列名 你能给我建议一下,如何写简单的方法来实现和减少过程时间 L1 A和L1 B列名称相同,但L1 C列名称完全不同。与其他级别类似 例:L2A,L2B,L2C。。。。。。L50A等 Declare @SQL max set @sql = ' SELECT '+@InputColumn+', 19 AS [LEVEL], --- Dynamic column name change '

我的查询如下,我有50个组合L1、L2、L3。。L50具有不同的where子句和不同的列名

你能给我建议一下,如何写简单的方法来实现和减少过程时间

L1 A和L1 B列名称相同,但L1 C列名称完全不同。与其他级别类似

例:L2A,L2B,L2C。。。。。。L50A等

 Declare @SQL max set @sql = ' SELECT '+@InputColumn+',

    19 AS [LEVEL],    --- Dynamic column name change
    'L1 A' AS NAME , --- Dynamic column name change
    BP_GEO AS [GEOGRAPHY],
    BP_CTRY AS COUNTRY ,
    BP_DIV AS DIVISION,
    BP_BU AS BUS ,
    BP_BUSINESS AS BU_LC_EC,
    BP_SEG_NEW AS SEGMENT ,
    FROM #Dummy(NOLOCK) 
    WHERE BP_SEG_NEW = GCP_SEG_NEW  --- Dynamic column name change

           UNION ALL

    SELECT    '+@InputColumn+', 

    19 AS [LEVEL],        --- Dynamic column name change
    'L1 B' AS NAME ,      --- Dynamic column name change
    BP_GEO AS [GEOGRAPHY],
    BP_CTRY AS COUNTRY ,
    BP_DIV AS DIVISION,
    BP_BU AS BUS ,
    BP_BUSINESS AS BU_LC_EC,
    BP_SEG_NEW AS SEGMENT,
    FROM #Dummy (NOLOCK) 
    WHERE BP_SEG_NEW <> GCP_SEG_NEW AND GCP_SEG_NEW = 'KUMAR'-- Unable to pass 2 condition in the where

           UNION ALL 

    SELECT    '+@InputColumn+', 
    19 AS [LEVEL],            --- Dynamic column name change
    'L1 C' AS NAME ,          --- Dynamic column name change
    GCP_GEO AS [GEOGRAPHY],   --- Dynamic column name change
    GCP_CTRY AS COUNTRY ,     --- Dynamic column name change
    GCP_DIV AS DIVISION,      --- Dynamic column name change
    GCP_BU AS BUS ,           --- Dynamic column name change
    GCP_BUSINESS AS BU_LC_EC, --- Dynamic column name change
    GCP_SEG_NEW AS SEGMENT,   --- Dynamic column name change
    FROM #Dummy(NOLOCK) 
    WHERE BP_SEG_NEW <> GCP_SEG_NEW --- Dynamic column name change 

    UNION ALL  --- level 20

    SELECT '+@InputColumn+',

    20 AS [LEVEL],    --- Dynamic column name change
    'L2 A' AS NAME , --- Dynamic column name change
    BP_GEO AS [GEOGRAPHY],
    BP_CTRY AS COUNTRY ,
    BP_DIV AS DIVISION,
    BP_BU AS BUS ,
    BP_BUSINESS AS BU_LC_EC,
    BP_SEG_NEW AS SEGMENT ,
    FROM #Dummy(NOLOCK) 
    WHERE Global = GCP_SEG_NEW  --- Dynamic column name change

           UNION ALL

    SELECT    '+@InputColumn+', 

    20 AS [LEVEL],        --- Dynamic column name change
    'L2 B' AS NAME ,      --- Dynamic column name change
    BP_GEO AS [GEOGRAPHY],
    BP_CTRY AS COUNTRY ,
    BP_DIV AS DIVISION,
    BP_BU AS BUS ,
    BP_BUSINESS AS BU_LC_EC,
    BP_SEG_NEW AS SEGMENT,
    FROM #Dummy (NOLOCK) 
    WHERE Global <> GCP_SEG_NEW 
    AND GCP_SEG_NEW = 'KUMAR'-- Unable to pass 2 condition in the where

    UNION ALL 

    SELECT    '+@InputColumn+', 
    20 AS [LEVEL],            --- Dynamic column name change
    'L2 C' AS NAME ,          --- Dynamic column name change
    GCP_GEO AS [GEOGRAPHY],   --- Dynamic column name change
    GCP_CTRY AS COUNTRY ,     --- Dynamic column name change
    GCP_DIV AS DIVISION,      --- Dynamic column name change
    GCP_BU AS BUS ,           --- Dynamic column name change
    GCP_BUSINESS AS BU_LC_EC, --- Dynamic column name change
    GCP_SEG_NEW AS SEGMENT,   --- Dynamic column name change
    FROM #Dummy(NOLOCK) 
    WHERE Global <> GCP_SEG_NEW --- Dynamic column name change 

    EXEC (@sql)
如何将L1 A、L1 B、L1 C与动态列名和where子句组合在一个select语句中

请参见示例查询以供参考

注意:上面的查询我只给出了一个组合,类似于我用UNIONALL编写代码的50个组合

请帮帮我


感谢

动态值是因为某些应用程序输入了不同的值而改变的,还是它们的改变只是为了让您可以构建一个静态查询而不必键入所有内容?如果是后者,您键入的内容越多,处理时间通常会缩短。你好,Muqo,请查看我更新的查询。。查询将是静态的,直到50级。我计划动态更改列名和where子句。示例:参见示例静态级别LCT,Where子句,我需要硬编码。如何避免硬编码并获得dynamically@Venki也许你可以用另一个例子来表达你想要实现的目标。您能否定义您打算用这种方法解决的问题?