了解しました。データベースに保存する必要のあるテーブルがあります。表の形式は次のとおりです。
Value | No Deductible | $100 | $250 | $500 |
=============================================
$20000 | $122 | $61 | $28 | N/A |
$30000 | $183 | $117 | $67 | $44 |
正規化して簡単にアクセスできるようにするために、SQLServerデータベースではテーブルは次の形式になります。
Value (PK) | Deductible (PK) | Cost |
======================================
$20000 | $0 | $122 |
$20000 | $100 | $61 |
Valueと列はDeductible共同主キーであり、重複を防ぎます。さらに、特定の控除可能な値のみを許可する制約があります。
現在、この形式はアクセシビリティに最適ですが、データを挿入するのは明らかに簡単ではありません。論理的なフロントエンドを構築する計画はすぐにはないので、このシナリオのビューが理想的です。しかし、簡単に編集できるビューを作成する試みは失敗しました。
1を試す
SELECT
t1.Value, t2.Cost AS [No Deductible],
t3.Cost AS [$100], t4.Cost AS [$250], t5.Cost AS [$500]
FROM Valuation AS t1
INNER JOIN Valuation AS t2 ON t1.Value = t2.Value
INNER JOIN Valuation AS t3 ON t2.Value = t3.Value
INNER JOIN Valuation AS t4 ON t3.Value = t4.Value
INNER JOIN Valuation AS t5 ON t1.Value = t5.Value
WHERE
(t2.Deductible = 0) AND (t3.Deductible = 100)
AND (t4.Deductible = 250) AND (t5.Deductible = 500)
複数のベーステーブルを変更できないため、これは機能しません。
2を試す
SELECT Value,
(SELECT Cost FROM Valuation WHERE Deductible = 0) AS [No Deductible],
(SELECT Cost FROM Valuation WHERE Deductible = 100) AS [$100],
(SELECT Cost FROM Valuation WHERE Deductible = 250) AS [$250],
(SELECT Cost FROM Valuation WHERE Deductible = 500) AS [$500]
FROM Valuation
GROUP BY Value
計算列を変更することもできません。
この問題に対するエレガントな解決策はありますか?おそらく組合との何か?私が今持っている唯一の解決策は、控除対象ごとに複数のビューを作成するか、元のテーブルレイアウトを維持するか(値/控除対象キーが他のテーブルで外部キーとして使用されるため、可能性はありますが好ましくありません)、または単に投資することだと思います。テーブルをシミュレートするための論理フロントエンドを作成する時間です(これは、私が言ったように、後で行いたいと思います)。