私はAccess 2010を使用してSQL Server上のいくつかのデータを操作しています。各エンティティは1つのIDを取得し、それに続く属性のリストを特定の最大または最小エントリなしで持つことができます。このデータセットを作成した人が持っていた解決策は、37種類の属性の列セットを作成することでした。各属性には4つの列があります(2つしか使用できません)。実際には、おそらく37個のアイテムを持つことを表す148個の列がありますが、グループ3または4を過ぎたほとんどの列はNULLです。値は一貫していますが、値は最初に最初の列グループに移動します。どの列もNULL値を持つとすぐに、それ以降のすべての列もNULLであるとみなすことができます。最初の列がNULLの場合、属性はありません。データはやや次のようになります。null値までテーブル列を反復する
| ID | Attr1 | Code1 | Attr2 | Code2 | Attr3 | Code3 | |----|-------|-------|--------|--------|--------|--------| | 1 | Foo | 2 | Bar | 1 | (null) | (null) | | 2 | Bar | 2 | (null) | (null) | (null) | (null) | | 3 | Bar | 1 | Foo | 1 | Bar | 2 |
その行がCODE1を持っている場合でも、誰かがコーデックス= 1(X任意の数であることを)望んでいる場合は、クエリが返すように、この上で照会するための最良の方法は、結果がどうなりますか= 1またはCode37 = 1である。
A.Mod1=1
Or A.Mod2=1
Or A.Mod3=1
Or A.Mod4=1
...
をしかし、それは恐ろしい見え、鉄砲水と同じくらい乾燥している:私はこのような何かを考えました。おそらく私が行う属性とコードの両方を対象にしたいのであれば、特に恐ろしいことになります。私は、最初のヌル値の値を反復して戻す方法を考える方法を考えることができることを簡単に見てきましたが、私のドラフトはあまり意味を持たず、ひどく乱雑ですネストされた。
上記の本当に醜い方法を除いて、これらの問題を解決する方法についてのご意見はありますか?
で以下のロジックを使用できるようになるあなたはパススルークエリを行うことができますか? COALESCEキーワードと逆の順序で列を使用して、列のリストの最初の非NULL値を取得します。 – Jeremy
パススルーを行うことができます。私はそれをすぐに見てみましょう。 –
さて、それは私が必要とするものに近づいています。これを実行したいステップの1つは、ヌルでないすべての値を返すことができるため、入力を省くことができることです。 また、特定の値を照合できるようにするため、「NOT NULL」が十分に意味がないため、結合のたびに式を書き出す必要があります。その後私は自分のORステートメントで始まったところに戻ります。 –