Вы можете попробовать CROSS JOIN
сгенерировать декартово произведение для столбцов score
, rate
, location
, составить полную таблицу.
затем выполните OUTER JOIN
базу на CROSS JOIN
таблице.
create table t(
score varchar(50),
rate varchar(50),
location varchar(50),
value int
);
insert into t values ('0-99','5-9','A',2);
insert into t values ('0-99','10-15','A',3);
insert into t values ('100-110','10-15','A',6);
insert into t values ('100-110','5-9','B',7);
insert into t values ('0-99','10-15','B',1);
Запрос 1 :
SELECT
s.score,
r.rate,
l.location,
coalesce(t1.value,0)
FROM
(SELECT DISTINCT score FROM T) s
CROSS JOIN
(SELECT DISTINCT rate FROM T) r
CROSS JOIN
(SELECT DISTINCT location FROM T) l
LEFT JOIN t t1 on s.score = t1.score and t1.rate = r.rate and t1.location = l.location
ORDER BY l.location
Результаты
| score | rate | location | coalesce |
|---------|-------|----------|----------|
| 0-99 | 10-15 | A | 3 |
| 0-99 | 5-9 | A | 2 |
| 100-110 | 10-15 | A | 6 |
| 100-110 | 5-9 | A | 0 |
| 0-99 | 10-15 | B | 1 |
| 0-99 | 5-9 | B | 0 |
| 100-110 | 10-15 | B | 0 |
| 100-110 | 5-9 | B | 7 |