【发布时间】:2019-06-12 19:26:20
【问题描述】:
我有 2 张桌子。一个是数据表,另一个是映射表。映射表包含 TYPE、ATTRIBUTE 和 DESTINATION 等字段。映射表告诉,对于特定的 TYPE,哪个属性出现在数据表的哪个列中
数据表
TYPE Data_field1 data_field2 data_field3
-------------------------------------------------
abc 1234 5678 4321
def 5679 1235 9877
映射表
TYPE Attribute destination
--------------------------------------
abc emp_id data_field1
abc dept_id data_field2
abc ph_no data_field3
def emp_id data_field2
def dept_id data_field3
def ph_no data_field1
我想要如下结果,
结果表
Type emp_id dept_id ph_no
------------------------------------------------
abc 1234 5678 4321
def 1235 9877 5679
我尝试如下,
Select Case when type='abc' then data_field1
when type='def' then data_field2 end emp_id,
case when type='abc' then data_field2
when type='def' then data_field3 end dept_id,
case when type='abc' then data_field3
when type='def' then data_field1 end ph_no
from data_table;
我从 MAPPING_TABLE 中手动检查了特定 ATTRIBUTE 的 TYPE 和 DESTINATION 并进行了上述查询。问题是我有超过 50 种类型,每种类型都有近 100 个属性。所以我无法对所有类型进行上述查询。
所以期待一个简单或更好的解决方案
提前致谢
【问题讨论】:
-
也许使用某种 PIVOT,但这不是一个很好的表格设计。
-
如果对于像“def”这样的另一种类型,属性和目标之间存在不同的映射,那么结果应该是什么。假设“def”的映射是 ph_no --> Data_field1,在这种情况下您期望什么?还有一件事,所有类型都有相同的属性吗?您能否编辑您的问题以使其仅适用于 3 Data_field 和 3 TYPE 以及您的预期结果?
-
你是 ryt Tejash。只有我拥有的确切情况。感谢您的建议。编辑了我的问题。