1

[tblAttributeData]「製品番号」の単一の主キー フィールドを持つテーブルがあります。各製品番号には、1 ~ 37 の属性を含めることができます。各属性はAttribute Name、 、Attribute Value、およびの 3 つのフィールドで構成されますAttribute Unit-of-Measure

例: [カタログ番号] [属性 1] [値 1] [単位 1] [属性 2] [値 2] [単位 2] 。. . 等

値/単位が指定された属性よりも多くの属性が指定されている場合があります。

Attribute Nameまた、値 + 単位の連結フィールドだけでなく、属性ごとに 2 つのフィールドを取得するクエリもあります。

例: [属性 1] [concValue 1] [属性 2] [concValue 2] 。. . 等

ここに私の問題があります。値を持つ属性のレポートを作成する必要がありますが、これは簡単に実行できます。ただし、これらの属性ごとにテキスト ボックスのセットを設定する必要がありますが、[concValue]nullのレコードを省略し、テキスト ボックスのセットの行をスキップしないようにする必要があります。

いずれかが null を返すと、その特定の and[concValue]だけでなく、レコード全体が省略されるため、基準フィールドを使用できないようです。[Attribute #][concValue #]

これらのフィールドの値を維持せずに、特定のレコードのいくつかのフィールドを省略する方法はありNullますか?

4

1 に答える 1

0

はい。ただし、ベース テーブル ( tblAttributeData) を再設計し、製品データ用と属性データ用の 2 つのテーブルに分割する必要があります。製品データ テーブルは、製品 ID と名前だけの非常に単純な場合があります。さらに、必要なものは何でも。次に、属性テーブルは、製品テーブルを参照して、行ごとに 1 つの属性を格納する必要があります。簡潔にするために、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 に答える