我有 2 个表,一个列出具有帐户可能具有或可能没有的特征值的特征 (TBL_Feat(,另一个列出帐户 (TBL_Acct(。
我正在寻找一个查询来为每个帐户提供所有功能,如果此帐户不存在该功能,则包含该功能但以 NULL 作为值的行。我的功能列表是固定的,所以这无关紧要。
Tbl_Feat
FEATURE_ID FEATURE_VALUE ACCOUNT_NBR
1 3 100
1 4 101
1 6 102
2 4 102
Tbl_Acct
Account_nbr
100
101
102
103
我期待看到的结果是这样的:
Account_nbr FEATURE_ID FEATURE_VALUE
100 1 3
100 2 null
101 1 4
101 2 null
102 1 6
102 2 4
103 1 null
103 2 null
一个附加问题,如果Tbl_Feat表中有一个不普遍的功能,你的答案会有什么变化吗?例如。FEATURE_ID = 3 在我的例子中。
使用cross join
生成行,left join
引入值:
select a.account_nr, f.feature_id, tf.feature_value
from tbl_acct a cross join
(select distinct feature_id from tbl_feat) f left join
tbl_feat tf
on tf.account_nbr = a.account_nbr and
tf.feature_id = f.feature_id
order by a.account_nr, f.feature_id;