如果条件为真,则从另一个表中选择一个值

时间:2021-04-17 14:55:58

标签: 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

如何在 Power Query 中实现这个 SQL 案例? 我正在尝试使用可以实现这一点的公式创建一个新的自定义列:

if [subject_type] = "User" then SELECT username from users table else if [subject_type] = "Group" then SELECT name from groups table else if [subject_type] = "ResourceOpportunity" then SELECT title from resource_occasions table else if [subject_type] = "QuestionAnswer" then SELECT name from questions_answers表 否则 [subject_type]

但这根本行不通。有人可以帮忙吗。几天以来,我一直在努力解决这个问题。谢谢!

1 个答案:

答案 0 :(得分:0)

假设每个查找表的每个 id 只包含一个(或没有)值:

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