簡體   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