将案例逻辑构建到 SQL 中的最佳方法
Best way to build case logic into SQL
我希望在 SQL 视图中构建一些逻辑,但我不确定如何着手进行此操作。基本上我有一个 SQL 视图,它需要查看 [sender_city]
和 [receiver_city]
以确定 [Division]
。我认为这需要是一个案例陈述??
我会有一个table来参考[Division]
:
[Location] [Division]
Location_1 Division_X
Location_2 Division_X
Location_3 Division_X
Location_4 Division_Y
Location_5 Division_Z
这是我描述所需逻辑的最佳尝试 (sudocode):
If [sender_city] = [Location], then display [Division]
else if [receiver_city] = [Location], then display [Division]
else "Other Division"
我还需要构建一些逻辑,如果 [sender_city]
和 [receiver_city]
都引用一个分区,它只需要使用 [sender_city]
分区。
您想两次左加入部门 table,一次是发送者,一次是接收者。 COALESCE 将 return 第一个非空值,并且还将处理您的规则,即在确定除法时发送方优先于接收方。
SELECT COALESCE(d1.Division, d2.Division, 'Other Division') AS Division
FROM SomeTable st
LEFT JOIN Divsion d1
ON st.sender_city = d1.Location
LEFT JOIN Division d2
ON st.receiver_city = d2.location
我希望在 SQL 视图中构建一些逻辑,但我不确定如何着手进行此操作。基本上我有一个 SQL 视图,它需要查看 [sender_city]
和 [receiver_city]
以确定 [Division]
。我认为这需要是一个案例陈述??
我会有一个table来参考[Division]
:
[Location] [Division]
Location_1 Division_X
Location_2 Division_X
Location_3 Division_X
Location_4 Division_Y
Location_5 Division_Z
这是我描述所需逻辑的最佳尝试 (sudocode):
If [sender_city] = [Location], then display [Division]
else if [receiver_city] = [Location], then display [Division]
else "Other Division"
我还需要构建一些逻辑,如果 [sender_city]
和 [receiver_city]
都引用一个分区,它只需要使用 [sender_city]
分区。
您想两次左加入部门 table,一次是发送者,一次是接收者。 COALESCE 将 return 第一个非空值,并且还将处理您的规则,即在确定除法时发送方优先于接收方。
SELECT COALESCE(d1.Division, d2.Division, 'Other Division') AS Division
FROM SomeTable st
LEFT JOIN Divsion d1
ON st.sender_city = d1.Location
LEFT JOIN Division d2
ON st.receiver_city = d2.location