1

我有一个表[tblAttributeData],其中有一个“产品编号”的主键字段。每个产品编号可能有 1 到 37 个属性——每个属性由 3 个字段组成:Attribute NameAttribute ValueAttribute Unit-of-Measure

例如 [目录编号] [属性 1] [值 1] [计量单位 1] [属性 2] [值 2] [计量单位 2]。. . 等等

可能有更多的属性被命名然后有属性给定值/单位。

我还有一个查询,它Attribute Name为 value + unit 拉取以及连接字段,导致每个属性有 2 个字段。

例如 [Attribute 1] [concValue 1] [Attribute 2] [concValue 2] 。. . 等等

所以这是我的问题:我必须填充任何具有值的属性的报告,这很容易完成。但是,我需要为这些属性中的每一个填充一组文本框,但我需要省略任何[concValue]为空的记录,并且跳过文本框中的一行。

我似乎无法使用条件字段,因为如果[concValue]返回 null 中的任何一个,则省略整个记录,而不仅仅是那个特定的[Attribute #]and [concValue #]

有没有办法在任何给定记录中省略几个字段而不保持Null这些字段中的值?

4

1 回答 1

0

可以,但只能通过重新设计您的基表 ( tblAttributeData) 并将其拆分为两个表:一个用于产品数据,另一个用于属性数据。产品数据表可能相当简单,只有产品 ID 和名称。加上你需要的任何其他东西。然后属性表必须每行存储一个属性,引用产品表。为简洁起见,我将使用 SQL 指定表:

create table tblProducts (
  ID autoincrement primary key
, [Name] varchar(100)
, Description varchar(255)
);

create table tblAttributes (
  ID autoincrement primary key
, ProductID long not null references tblProducts (ID)
, [Name] varchar(100)
, UoM varchar(10)
, [Value] double
);

这种设计的基本原理是,您当前在表列中存储了多达 37 个基本相同数据的副本。这是从水平到垂直重组的完美候选。在这种新设计下,您自然会显示所有产品并忽略其值的所有属性,null因为根据设计它们根本不会出现在tblAttributes表格中。为此,您只需要进行正常的内部连接:

select *
from tblProducts as p
inner join tblAttributes as a
on p.ID = a.ProductID
于 2013-09-24T23:14:40.540 回答