если условие истинно, выберите значение из другой таблицы

#powerbi #powerquery

Вопрос:

Может кто-нибудь, пожалуйста, помочь мне с этим SQL-запросом?

     CASE
    WHEN al.subject_type LIKE '%User' THEN (SELECT  CONCAT_WS(" ",u.fname,u.lname) from users WHERE users.id = al.subject_id )
    WHEN al.subject_type LIKE '%Group' THEN (SELECT name from `groups` WHERE `groups`.id = al.subject_id )
    WHEN al.subject_type LIKE '%ResourceOpportunity' THEN (SELECT title from resource_occasions ro JOIN resources r ON  r.id= ro.resource_id AND ro.id = al.subject_id)
    WHEN al.subject_type LIKE '%QuestionAnswer' THEN 
    (SELECT ri.name from question_answers qa 
    JOIN questions q ON  q.id= qa.question_id 
    JOIN resource_items ri ON ri.id = q.item_id
    AND qa.id = al.subject_id)
    ELSE al.subject_type
END Resource
 

Как достичь этого случая SQL в Power Query?
Я пытаюсь создать новый пользовательский столбец с формулой, которая может сделать это:

если [subject_type] = «Пользователь», затем ВЫБЕРИТЕ имя пользователя из таблицы пользователей, иначе если [subject_type] = «Группа», затем ВЫБЕРИТЕ имя из таблицы групп, иначе если [subject_type] = «Возможность использования ресурсов», затем ВЫБЕРИТЕ заголовок из таблицы resource_occasions, иначе если [subject_type] = «Ответ на вопросы», затем ВЫБЕРИТЕ имя из таблицы questions_answers, еще [subject_type]

Но это совсем не работает. Может кто-нибудь помочь, пожалуйста. Я пытаюсь решить эту проблему уже несколько дней. Спасибо!

Ответ №1:

Предполагая, что каждая таблица поиска содержит только одно (или ни одного) значения для каждого идентификатора:

 let
    Source = al,
    join = Table.NestedJoin(Source, "id", users, "id", "users"),
    join1 = Table.NestedJoin(join, "id", groups, "id", "groups"),
    join2 = Table.NestedJoin(join1, "id", resource_occassions, "id", "resource_occassions"),
    join3 = Table.NestedJoin(join2, "id", questions_answers, "id", "questions_answers"),
    final = Table.AddColumn(join3, "new", each if [subject_type] = "User" then [users][username]{0}?
                                          else if [subject_type] = "Group" then [groups][name]{0}?
                                          else if [subject_type] = "ResourceOpportunity" then [resource_occasions][title]{0}?
                                          else if [subject_type] = "QuestionAnswer" then [questions_answers][name]{0}?
                                          else [subject_type])
in
    final