我有一个业务场景,我试图根据另一个列的值选择列中的数据,然后将其作为单个记录转置。
我的资料:
MEDIUM MEDIUM_DETAIL VALUE
PHN HOME 7843898789
PHN WORK 8979909890
PHN MOBILE 9899876776
EML PRIMARY [email protected]
EML ALTERNATE [email protected]
要求是根据MEDIUM_DETAIL值将PHN和EML显示为两列。
如果MEDIUM ='EML',请首先检查MEDIUM_DETAIL ='PRIMARY'并使用其值。如果其为NULL,则继续检查“ ALTERNATE”并使用其值。如果两者都为null,则在EML列中输出NULL。
在MEDIUM ='PHN'中,首先检查MEDIUM_DETAIL ='HOME'。如果有值,请使用它。如果它为NULL,则继续检查“ WORK”和“ MOBILE”。如果所有值均为空,则输出NULL。
因此,根据上述示例,我的输出应如下所示:
EML PHN
[email protected] 7843898789
我尝试使用max(decode)...进行转置,甚至使用PIVOT,但是这些技术需要某种聚合,并且无法提供所需的结果。
关于如何进行此操作有什么建议吗?
这只是一个枢轴查询:
SELECT
COALESCE(MAX(CASE WHEN MEDIUM = 'EML' AND MEDIUM_DETAIL = 'PRIMARY'
THEN VALUE END),
MAX(CASE WHEN MEDIUM = 'EML' AND MEDIUM_DETAIL = 'ALTERNATE'
THEN VALUE END)) AS EML,
COALESCE(MAX(CASE WHEN MEDIUM = 'PHN' AND MEDIUM_DETAIL = 'HOME'
THEN VALUE END),
MAX(CASE WHEN MEDIUM = 'PHN' AND MEDIUM_DETAIL = 'WORK'
THEN VALUE END),
MAX(CASE WHEN MEDIUM = 'PHN' AND MEDIUM_DETAIL = 'MOBILE'
THEN VALUE END)) AS PHN
FROM yourTable;
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句