0

我有一个从 SQL 表创建报告的 SSRS 报告:

 id  type    name
 1   fruit   wilk
 2   fruit   scot
 3   paper   jon
 4   pen     brad
 5   tape    lin
 6   water   james

该报表有两个数据集:一个为报表提供查询,另一个为参数提供数据。因此,在报告中,多值参数从 dataset2 获取其值。

-- dataset1::  
select ID, TYPE, name from table1 where type in (@types)

-- dataset2::
select TYPE from table1

报告是根据从下拉列表(多选列表)中选择的类型生成的。

例如,如果我们选择“fruit”,报告将显示:

威尔克,苏格兰人

如果我们选择“水”:

詹姆士

现在问题是我需要为所有值“TAPE”、“pen”和“paper”创建一个名称,比如名称“STATIONARY”,这样下拉列表应该只显示:

水果, 文具, 水

当我从下拉列表中选择“STATIONARY”时,报告应显示:

jon, brad, lin(所有 3 人都有某种形式的固定,即纸、笔、胶带)

当我选择类型为“STATIONARY”和“water”时,它应该显示:

乔恩、布拉德、林、詹姆斯

4

2 回答 2

1

就从这里的臀部。

考虑将类别字段添加到您的表中。因此,对于您的水果和水,您可以有一个名为“食物”的类别,而对于您的笔、纸和胶带,该类别将被称为“固定”。

将另一个数据集添加到您的报告中,称为“类别”。

SELECT Category FROM table1

添加另一个参数,它是您的新数据集的多项选择,称为@Category。

在您的主要查询中添加:

...AND Category IN (@Category)

编辑

请记住,此建议完全忽略了数据库中的规范化。我知道这不是您的问题的意图,但这是您应该始终考虑的事情。如果是我,我什至会添加一个类别表。然后使用您所称的“table1”,我将添加一个指向类别表中 ID 的外键。您甚至可以在类型列中看到此问题。注意水果是如何被多次使用的。

于 2012-12-17T16:44:08.160 回答
0

我会为此创建另外几个表,称为Itemand ItemType

ItemType有两个字段:(ItemTypeId自动递增的主键)和Name. ItemType将具有如下值:

ItemTypeId    Name
1             Food
2             Stationery

Item具有三个字段:(ItemId自动递增的主键)NameItemTypeId(来自上ItemType表)。它看起来像这样:

ItemId  Name   ItemTypeId
1       Fruit  1
2       Paper  2
3       Pen    2
4       Tape   2
5       Water  1

将字段添加到该ItemId字段table1并删除该type字段,因此它现在看起来像:

 id  ItemId  name
 1   1       wilk
 2   1       scot
 3   2       jon
 4   3       brad
 5   4       lin
 6   5       james

我们现在知道从链接到的项目的类型ItemType

创建两个参数:@ItemTypes@Items作为多值。

@ItemTypesItemType表中填充:

SELECT ItemTypeId, Name FROM ItemType

ItemTypeIdValueNameLabel

@Items从表中填充,但按参数Item过滤,如下所示:@ItemTypes

SELECT ItemId, Name FROM Item WHERE (ItemTypeId IN @ItemTypes)

ItemIdValueNameLabel

现在,当您@ItemTypes在第一个参数中选择时,第二个参数将仅显示该类型的项目。

好的,回到您的查询。您的主要查询现在看起来像:

SELECT Item.Name AS ItemName, ItemType.Name AS ItemTypeName, table1.Name
FROM table1
INNER JOIN Item ON Item.ItemId = table1.ItemId
INNER JOIN ItemType ON ItemType.ItemTypeId = Item.ItemTypeI
WHERE (ItemType.ItemTypeId IN @ItemTypes)
AND (Item.ItemId IN @Items)

我认为我们在这里的工作已经完成。

于 2012-12-17T21:52:09.133 回答