Я сгенерировал это представление после использования LEFT JOIN
для 2 таблиц (упрощенный пример).
Таблицы:
T1: Id, ...other columns not used
+----+-----+
| Id | ... |
+----+-----+
| 1 | ... |
| 2 | ... |
+----+-----+
T2: Id, NewId (Foreign Key from T1), Status, ...other columns not used
+-----+-------+--------+-----+
| Id | NewId | Status | ... |
+-----+-------+--------+-----+
| 1 | 1 | 1 | ... |
| 2 | 1 | 2 | ... |
| 3 | 1 | 2 | ... |
| 4 | 1 | 3 | ... |
| 5 | 1 | 1 | ... |
| 6 | 1 | 1 | ... |
| 7 | 2 | 0 | ... |
| 8 | 2 | 2 | ... |
| 9 | 2 | 1 | ... |
| 10 | 2 | 2 | ... |
+-----+-------+--------+-----+
Текущее представление:
SELECT
T1.Id,
T2.Status
FROM T1
LEFT JOIN T2 ON T1.Id = T2.NewId;
Представление: (до меня дошло)
+----+--------+
| Id | Status |
+----+--------+
| 1 | 1 |
| 1 | 2 |
| 1 | 2 |
| 1 | 3 |
| 1 | 1 |
| 1 | 1 |
| 2 | 0 |
| 2 | 2 |
| 2 | 1 |
| 2 | 2 |
+----+--------+
Требуемое представление должно иметь отдельные столбцы для каждого значения состояния (которые в точности равны 0, 1, 2 или 3). 0 и 1 хранятся в одном столбце.
Обязательный вид: (но мне это нужно)
+----+------------+----------+----------+
| Id | Status 0/1 | Status 2 | Status 3 |
+----+------------+----------+----------+
| 1 | 1 | 1 | 1 |
| 2 | 2 | 2 | 2 |
+----+------------+----------+----------+
Мне кажется, что я что-то упустил из основы c , Как я могу получить это представление?
Я не думаю, что нам нужны вещи Rank (), и это большой запрос к 4 нормализованным таблицам (на практике), поэтому мне нужно оптимальное решение. Подзапросы работают со встроенными SELECT
запросами , но им также необходимо JOIN
s. Производственное требование имеет 10 столбцов для подсчета более 2 отдельных столбцов.