我有一个表[tblAttributeData]
,其中包含“产品编号”的单个主键字段。每个产品编号可以包含1到37个属性 - 每个属性包含3个字段:Attribute Name
,Attribute Value
和Attribute Unit-of-Measure
。
e.g。 [目录编号] [属性1] [值1] [UOM 1] [属性2] [值2] [UOM 2]。 。 。等
可能有更多属性命名,然后有属性给定值/单位。
我还有一个查询可以提取Attribute Name
以及值+单位的连接字段,从而产生每个属性2个字段。
e.g。 [属性1] [concValue 1] [属性2] [concValue 2]。 。 。等
所以这就是我的问题:我必须填充一个具有值的任何属性的报告,这很容易完成。但是,我需要为每个属性填充一组文本框,但我需要省略[concValue]
为空且不的任何记录在文本框集中跳过一行。
我似乎无法使用条件字段,因为如果[concValue]
中的任何一个返回null,则省略整个记录,而不仅仅是那个特定的[Attribute #]
和[concValue #]
有没有办法省略任何给定记录中的几个字段而不在这些字段中保留Null
的值?
答案 0 :(得分:0)
是的,但只能通过重新设计基表(tblAttributeData
)并将其分成两个表:一个用于产品数据,一个用于属性数据。产品数据表可能相当简单,只是产品ID和名称。加上你需要的任何东西。然后,属性表必须每行存储一个属性,引用products表。为简洁起见,我只使用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