如何编写Teradata查询拆分单行多值的CONDICIONES列
Teradata单行多值列拆分查询方案
你当前的查询仅包含行级筛选逻辑,没有拆分多值列的处理,因此无法返回拆分后的单值结果。Teradata 可使用内置表函数 STRTOK_SPLIT_TO_TABLE 实现多值列的行转列拆分,参考写法如下:
SELECT t."Hora TRX", t."Fecha TRX", t."Código Cliente", s.token AS Condicion_individual -- 拆分后的单个条件值 FROM CONDICIONES t INNER JOIN TABLE ( STRTOK_SPLIT_TO_TABLE( t."Código Cliente", -- 传入能唯一标识原行的字段即可,也可替换为表主键 t.Condiciones, -- 指定要拆分的多值列 '<替换为实际分隔符>' -- 示例:逗号填','、竖线填'|',多分隔符可直接并列写如',;|' ) RETURNS (outkey VARCHAR(100), tokennum INTEGER, token VARCHAR(100)) ) s ON 1=1 -- 筛选拆分后的值符合要求的记录,会自动过滤同一条原行中不符合的其他值 WHERE s.token IN ('0800','0801','0805','0806','0821')
注意事项
- 可根据实际业务的CONDICION值长度调整RETURNS子句中token的字段长度,避免值截断
- 若需要保留原行所有拆分后的值(仅要求原行至少包含一个目标值),可将WHERE条件替换为你原来的写法:
WHERE t.CONDICIONES LIKE ANY ('%0800%', '%0801%', '%0805%', '%0806%', '%0821%') - 若多值列存在多余空格,可先对拆分列做TRIM处理再传入函数
内容的提问来源于stack exchange,提问作者Micky Stone
相关产品推荐
相关产品推荐

