Как объединить выберите две таблицы с условием в столбце sql - PullRequest
0 голосов
/ 05 февраля 2020

У меня есть таблица в sql сервере, структурированная как эта таблица1

----------------------------
| ID | year | code | value |
----------------------------
|  1 | 2019 |  41  |  33   |
|  1 | 2019 |  42  |  34   |
|  2 | 2019 |  42  |  35   |
|  2 | 2019 |  43  |  36   |
----------------------------

и эта таблица2

---------------------
| ID | year | index |
---------------------
|  1 | 2019 |  15   |
|  2 | 2019 |  16   |
---------------------

и как-то я хочу выбрать присоединиться к ним и стать таким

---------------------------------------------------------------------
| ID | year | index | value_code_41 | value_code_42 | value_code_43 |
---------------------------------------------------------------------
|  1 | 2019 |  15   |      33       |      34       |       0       |
|  2 | 2019 |  16   |       0       |      35       |      36       |
---------------------------------------------------------------------

Я уже пробовал подобный случай, но он возвращает 0 в value_code_42 и value_code_43

select  b.*,
        case when a.value !=0 and kode=41 then a.value else 0 end as value_code_41,
        case when a.value !=0 and kode=42 then a.value else 0 end as value_code_42,
        case when a.value !=0 and kode=43 then a.value else 0 end as value_code_43
from table1 a, table2 b
where a.year=b.year and a.id=b.id

что не так с моим выбором выбора?

1 Ответ

1 голос
/ 05 февраля 2020

Для объединения набора данных вам нужно объединиться:

select  
    b.id,
    b.year, 
    b.index,
    max(case when a.kode = 41 then a.value else 0 end) as value_code_41,
    max(case when a.kode = 42 then a.value else 0 end) as value_code_42,
    max(case when a.kode = 43 then a.value else 0 end) as value_code_43
from table1 a
inner join table2 b on a.year = b.year and a.id = b.id
group by b.id, b.year, b.index
...