繁体   English   中英

将多个字段合并到一个表中

[英]Consolidating multiple fields within one table

你好 Stack Overflow 社区,

我想合并同一个表中的多个字段。 在其他字段中,“Table1”包含多个字段,每个字段对应不同的 US state。对于给定的“ID”(主键),US state 字段将为对应的 state 返回“1”,并将返回state 字段中的 rest 为“空”。 任何给定的 state 可能适用于多个 ID。

具体来说,我想将所有 state 字段合并为一个字段,该字段将为给定 ID 返回相应的 state,而不是拥有不必要数量的 state 字段,这会使数据更难处理。 我在下面直观地概述了现有格式和所需格式。 任何帮助是极大的赞赏!

现有格式和所需格式的可视化示例。

我尝试了以下无法创建所需格式的方法:

INSERT INTO Table1 (ID, Cust_St_NY, Cust_St_IL, Cust_St_...) SELECT GROUP CONCAT (ID, Cust_St_NY, Cust_St_IL, Cust_St_...) FROM Table1 按ID分组

我会使用 CASE 语句(但是,我可能会过度使用它们)

对于 Cust_St 列:

CASE WHEN Cust_ST_NY = 1 THEN 'NY' WHEN Cust_ST_IL = 1 THEN 'IL' ELSE NULL END

这是 Teradata 特定文档: https://docs.teradata.com/r/zzfV8dn~lAaKSORpulwFMg/j8_MiWcAgH1twjaVyLkeCg

如果恰好有一个 state 设置为 1,您可以像这样使用 UNPIVOT:

select id, substring(state from 9) as state, othercolumns
from vt
unpivot
 (       -- state contains the column name
   flag for state in (Cust_St_NY,Cust_St_IL,Cust_St_WY,...)
 ) as dt

UNPIVOT 默认排除空值,导致每个 ID 单独一行。

我不知道性能如何,但我希望@bph 的 CASE 性能更好。 两者都需要一个状态列表,可以很容易地基于 dbc.ColumnsV 创建。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM