如何在计算行总数时有条件地排除或添加列

时间:2016-06-02 11:25:57

标签: tsql sql-server-2005

我有一个存储过程,其参数定义如下

    @CategoryNames  NVARCHAR(MAX)

上面的参数从应用程序中获取逗号分隔的字符串,例如,值可以是这样的@StaffCategoryIds=N'Category1,Category2,Category3,Category4,Category5'

然后我有sql查询下面的示例

SET @sql = @sql + 'TypeId, 
        TypeName, 
        Condition,
        Region, 
        (Category1 + Category2 + Category3 + Category4 + Category5) AS Total INTO ##QueryResults
FROM Table1;'

在上面的查询中计算我的总列时,如何在我的@StaffCategoryIds逗号分隔字符串中检查类别列(比如Category2或Category5)是否存在,然后将其包含在我的Total列的计算中?

EG。如果' Category2'存在于@StaffCategoryIds中,然后我将其包含在Total的计算中,否则我将其排除。

2 个答案:

答案 0 :(得分:0)

尝试:

    DECLARE @CategoryNames  NVARCHAR(MAX) = N'Category1,Category2,Category3,Category4,Category5',
        @sql NVARCHAR(MAX) = ''

SET @sql = 'SELECT TypeId, 
        TypeName, 
        Condition,
        Region, ('+ REPLACE(@CategoryNames,',','+')+')
        AS Total INTO ##QueryResults
FROM Table1;'

SELECT @SQL

它返回:

SELECT TypeId, 
    TypeName, 
    Condition,
    Region, (Category1+Category2+Category3+Category4+Category5)
    AS Total INTO ##QueryResults 
FROM Table1;

然后你可以执行该语句:

EXEC @Sql

答案 1 :(得分:0)

您可以再次验证列名称系统表" sys.columns"并返回任何行,如上所示连接它们以调整您的查询

  SELECT  [name]
    FROM 
        sys.syscolumns 
    WHERE [name] IN ('Col1,Col2...ColN')
    AND OBJECT_NAME(id) = 'TableName'