【问题标题】:How to implement multiselect with new columns in SSRS如何在 SSRS 中使用新列实现多选
【发布时间】:2015-06-10 17:58:26
【问题描述】:

我需要在值都是 CSV 的列上允许多选。我一直在使用LIKE 语句和单个选择参数,但我需要该参数来允许多选。我的一个想法是为每个参数值(只有 6 个)创建列,然后使用 CASE 语句将它们设置为 True/False,然后我在想如果选择了 Type A,那么它将查看ColumnA,如果他们也选择Type B,那么它也会查看ColumnB

整个查询非常大,但这是我正在处理的摘录

CASE WHEN T1.Types LIKE '%Type A%' THEN 1 ELSE 0 END AS TypeA

这是在 CTE 中,在我的最终选择语句中它仅引用 TypeA 等。最终查询应该是这样的

SELECT ID, Types, TypeA, TypeB, TypeC
FROM TableA
WHERE Types IN [parameter]

以下是“类型”列的一些示例数据。

|________Types________|
|        TypeA        |
|     TypeA, TypeC    |
| TypeA, TypeB, TypeC |

我怎样才能让它工作而又不让它变得太复杂?我知道如果我想为每种类型设置 6 个不同的参数,然后为每个类型设置一个 True/False,这很容易实现,但我怎样才能让它成为一个带有单个参数的多选呢?

【问题讨论】:

  • 如果您想在不复杂的情况下完成这项工作,请将您的数据标准化。

标签: sql-server sql-server-2008 reporting-services ssrs-2008


【解决方案1】:

如果您只有 6 种类型,您可以在最终选择中执行以下操作:

SELECT DISTINCT TableA.*
FROM TableA
JOIN
    (
    Select '%Type A%' TypeCode where @TypeCSVParameter like '%Type A%'
    union all
    select '%Type B%' TypeCode where @TypeCSVParameter like '%Type B%'
    union all
    select '%Type C%' TypeCode where @TypeCSVParameter like '%Type C%'
    union all
    select '%Type D%' TypeCode where @TypeCSVParameter like '%Type D%'
    union all
    select '%Type E%' TypeCode where @TypeCSVParameter like '%Type E%'
    union all
    select '%Type F%' TypeCode where @TypeCSVParameter like '%Type F%'
    ) ValidTypes
on TableA.Types like TypeCode

您可以这样做而不是这个硬编码列表的另一种方法是使用一个函数来解析您的 CSV 列表,正如这个问题 SSRS multi-value parameter using a stored procedure 中所建议的那样

不过,我同意 Tab Allerman 的评论,您确实应该重组数据库。有一个带有列表的列会使事情变得困难。您可能应该有一个包含所有有效类型的TypeCode 表,以及一个将您的Table1.ID 链接到适用的TypeCode 的关系表。这样您就可以避免像这样的硬编码特殊情况,并且可以更轻松地添加或更改类型。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-02-08
    • 2015-02-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多