Итак, у меня есть таблица, которую мне нужно сохранить в базе данных. Таблица имеет следующий формат:
Value | No Deductible | $100 | $250 | $500 |
=============================================
$20000 | $122 | $61 | $28 | N/A |
$30000 | $183 | $117 | $67 | $44 |
Чтобы сделать ее нормализованной и легко доступной, таблица будет иметь следующий формат в базе данных SQL Server:
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
Вы также не можете изменять вычисляемые столбцы.
Есть ли элегантное решение этой проблемы? Может что-то с союзами? Я чувствую, что единственными решениями, которые у меня есть сейчас, являются создание нескольких представлений для каждой франшизы, сохранение исходного макета таблицы (возможно, но не предпочтительно, поскольку ключ значения/франшизы используется в качестве внешнего ключа в других таблицах) или просто инвестировать времени на создание логического внешнего интерфейса для имитации таблицы (что, как я уже сказал, я бы предпочел сделать позже).
INSTEAD OF
, чтобы реализовать это, если вы хотите, чтобы представление было обновляемым. Пример здесь сводная таблица доступна только для чтения, и ячейки нельзя редактировать"> stackoverflow.com/questions/5011944/ - person Martin Smith   schedule 16.04.2011