如何 'create' Teradata SQL 中的 NULL 数据用于不存在的关系
How to 'create' NULL data in Teradata SQL for non existing relations
我有 2 个 table,一个列出具有帐户可能具有或不具有的特征值的特征 (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 table 中有一项不普遍的功能,您的回答会有什么变化吗?例如。 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;
我有 2 个 table,一个列出具有帐户可能具有或不具有的特征值的特征 (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 table 中有一项不普遍的功能,您的回答会有什么变化吗?例如。 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;