如何将Table1表中多州字段合并为单一对应州字段?
合并表中多州字段为单一州名称字段的解决方案
核心逻辑
你的表中每个ID仅对应一个州字段为1,其余为NULL,不需要用GROUP_CONCAT(这是用来拼接多行数据的),只需要判断哪个州字段有值,返回对应的州代码即可。
一、查询生成目标结果(不修改原表)
MySQL
SELECT ID, CASE WHEN Cust_St_NY = 1 THEN 'NY' WHEN Cust_St_IL = 1 THEN 'IL' -- 按你的表结构继续添加其他州的判断 ELSE 'Unknown' -- 处理无匹配值的异常情况 END AS Customer_State FROM Table1;
SQL Server
SELECT ID, CASE WHEN Cust_St_NY = 1 THEN 'NY' WHEN Cust_St_IL = 1 THEN 'IL' -- 补充其他州的判断逻辑 ELSE 'Unknown' END AS Customer_State FROM Table1;
PostgreSQL
SELECT ID, CASE WHEN Cust_St_NY = 1 THEN 'NY' WHEN Cust_St_IL = 1 THEN 'IL' -- 添加剩余州的判断 ELSE 'Unknown' END AS customer_state FROM Table1;
二、修改原表结构(新增字段并迁移数据)
如果需要永久将州字段合并为单一字段,可以按以下步骤操作:
MySQL 示例
-- 1. 新增存储州名称的字段 ALTER TABLE Table1 ADD COLUMN Customer_State VARCHAR(2); -- 2. 将原有州字段的值映射到新字段 UPDATE Table1 SET Customer_State = CASE WHEN Cust_St_NY = 1 THEN 'NY' WHEN Cust_St_IL = 1 THEN 'IL' -- 继续添加其他州的映射 ELSE 'Unknown' END; -- 3. (可选)删除不再需要的旧州字段 ALTER TABLE Table1 DROP COLUMN Cust_St_NY, DROP COLUMN Cust_St_IL; -- 按实际表结构补充其他要删除的州字段
你的原SQL问题说明
你使用的GROUP_CONCAT是用于拼接多行数据的函数,完全不适用单行内多字段转单字段的场景,而且INSERT语句会导致重复插入数据,逻辑不符合需求。
内容的提问来源于stack exchange,提问作者RLUGO
相关产品推荐
相关产品推荐

