надеюсь, эта схема имеет смысл ...присоединяющегося SQL представления с альтернативными значениями вместо нулями
проблемы, что у меня много столбцов в много-много таблице, как я могу получить все значения столбцов в представлении , не делая ISNULL
для каждой строки? (SQL Server 10,5)
ITEM
+------+
| ID |
|------|
| 1 |
| 2 |
| 3 |
+------+
LANGUAGE
+-------+---------+
| ID | Name |
|-------+---------|
| 1 | English |
| 2 | French |
+-------+---------+
Item Names
+----------+---------+------------+------------+
| ItemID | LangId | Name | Color |
|----------+---------+------------+------------|
| 1 | 1 | apple | red |
| 1 | 2 | pomme | rouge |
| 2 | 1 | orange | orange |
| 3 | 1 | bannana | yellow |
+----------+---------+------------+------------+
желаемый вид
+----------+---------+------------+------------+
| ItemID | LangId | Name | Color |
|----------+---------+------------+------------|
| 1 | 1 | apple | red |
| 1 | 2 | pomme | rouge |
| 2 | 1 | orange | orange |
| 2 | 2 | orange | orange | <--- added automatically
| 3 | 1 | bannana | yellow |
| 3 | 2 | bannana | yellow | <--- added automatically
+----------+---------+------------+------------+
, потому что я пытаюсь создать представление есть определенные ограничения:
столбцы, измененные в представлении должны непосредственно ссылаться базовые данные в столбцах таблицы. Столбцы не могут быть получены каким-либо иным способом, например, с помощью следующих действий:
- Агрегатная функция: AVG, COUNT, SUM, MIN, MAX, группирование, СТАНДОТКЛОН, СТАНДОТКЛОНП, ВАР, и ДИСПР.
- Расчет. Столбец не может быть вычислен из выражения, которое использует другие столбцы. Столбцы, которые формируются с помощью заданных операторов UNION, UNION ALL, CROSSJOIN, EXCEPT и INTERSECT, вычисляются и также не могут обновляться.
Я, тем не менее, создаю несколько представлений, а это значит, что раньше я использовал некоторые из этих ограничений. мы можем предположить, что у меня уже есть эта таблица
посреднический вид:
+----------+---------+------------+------------+
| ItemID | LangId | Name | Color |
|----------+---------+------------+------------|
| 1 | 1 | apple | red |
| 1 | 2 | pomme | rouge |
| 2 | 1 | orange | orange |
| 3 | 1 | bannana | yellow |
+----------+---------+------------+------------+
, а также:
+----------+---------+------------+------------+
| ItemID | LangId | Name | Color |
|----------+---------+------------+------------|
| 1 | 1 | apple | red |
| 1 | 2 | pomme | rouge |
| 2 | 1 | orange | orange |
| 2 | 2 | - | - |
| 3 | 1 | bannana | yellow |
| 3 | 2 | - | - |
+----------+---------+------------+------------+
это некоторые мнения:
view1 - все комбинации
view2 - все комбинации с языками
соответствующий SQL:
SELECT dbo.view1.ItemID, dbo.view1.LanguageID, dbo.ItemLanguages.Name, dbo.ItemLanguages.Color
FROM dbo.ItemLanguages RIGHT OUTER JOIN
dbo.view1 ON dbo.ItemLanguages.LanguageID = dbo.view1.LanguageID AND dbo.ItemLanguages.ItemID = dbo.view1.ItemID
результат зрения 2
здесь есть тестовая база данных с представлениями и таблицами: http://pastebin.com/4BpBSmHY
Просто пытаюсь понять вопрос ... Так что, поскольку у FruitId 1 есть FruitName для обоих языков, нет новых строк. А поскольку FruitId 2 и 3 имеют значение только для английского языка, строка автоматически генерируется для всех других языков? – Tom
да, это правильно. – Daniel
Что делать, если есть другой язык «немецкий». Итак, у фрукта ID = 1 должна быть еще одна строка для третьего языка. Тогда какие плоды следует дублировать «немецким»? Apple или Pomme –