Создание столбцов на основе TypeID - PullRequest
1 голос
/ 19 июня 2019

Это может сбить с толку, но я уверен, что один из вас, ребята, может помочь мне с этим. Итак, в основном, у меня есть эта главная таблица, состоящая из следующего:

ObjID, InfoID, InfoVal, (other columns not needed).

When InfoID = 1, the InfoVal for that row represents the Report name. 
When InfoID = 4, the InfoVal for that row represents the Stored Procedures Name.
When InfoID = 16,17,23 or 24, the InfoVal for that row represents the Email for that Report.

Мой вопрос: как мне точно преобразовать каждое условие в столбец и объединить все вместе? Пока у меня есть несколько отдельных запросов с условием WHERE для InfoID = ?? и я хотел бы объединить каждый столбец.

По сути, я хотел бы получить столбец для имени отчета, имени хранимой процедуры и столбца для электронного письма.

Если вам нужны картинки для визуализации, дайте мне знать!

Спасибо.

1 Ответ

3 голосов
/ 19 июня 2019

Вы, кажется, хотите условную агрегацию

select objid,
       max(case when infoid = 1 then infoval end) as report_name,
       max(case when infoid = 4 then infoval end) as stored_procedure_name,
       max(case when infoid = 16 then infoval end) as email1,
       max(case when infoid = 17 then infoval end) as email2,
       max(case when infoid = 23 then infoval end) as email3,
       max(case when infoid = 24 then infoval end) as email4
from t
group by objid;

Для фильтрации:

select t.*
from (select objid,
             max(case when infoid = 1 then infoval end) as report_name,
             max(case when infoid = 4 then infoval end) as stored_procedure_name,
             max(case when infoid = 16 then infoval end) as email1,
             max(case when infoid = 17 then infoval end) as email2,
             max(case when infoid = 23 then infoval end) as email3,
             max(case when infoid = 24 then infoval end) as email4
      from t
      group by objid
    ) t
where email1 like . . .
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...