2013-09-24 99 views
1

我有一个表[tblAttributeData]有一个单一的主键字段为“产品号”。每个产品编号可以具有1到37个属性,每个属性由3个字段组成:Attribute Name,Attribute ValueAttribute Unit-of-Measure查询以忽略字段(不记录),如果指定的字段为空

例如[产品目录号] [属性1] [值1] [UOM 1] [属性2] [值2] [UOM 2]。 。 。等等。

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

我也有一个查询,拉动Attribute Name以及一个连接字段的值+单位,导致每个属性2个字段。

例如[属性1] [concValue 1] [属性2] [concValue 2]。 。 。等等。

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

我似乎无法使用的标准场,因为如果[concValue]回报的任何一个null,则忽略整个记录,而不仅仅是特定[Attribute #][concValue #]

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

回答

0

是的,但只能通过重新设计基表(​​)并将其拆分为两个表格:一个用于产品数据,另一个用于属性数据。产品数据表可能相当简单,只是产品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 
相关问题