基于布尔值结果拼接对应表格列名的技术需求
需求说明:拼接值为True的列名
需求:当表格中对应列的值为True时,将该列的列名进行拼接,生成新的Flags列。
输入表格
| ID | Flag1 | Flag2 | Flag3 |
|---|---|---|---|
| 1 | True | False | True |
| 2 | False | True | True |
期望输出表格
| ID | Flags |
|---|---|
| 1 | Flag1, Flag3 |
| 2 | Flag2, Flag3 |
实现方法
方法1:SQL实现
假设表名为flag_table,不同数据库可使用对应语法实现:
MySQL/MariaDB:
SELECT ID, CONCAT_WS(', ', CASE WHEN Flag1 = TRUE THEN 'Flag1' END, CASE WHEN Flag2 = TRUE THEN 'Flag2' END, CASE WHEN Flag3 = TRUE THEN 'Flag3' END ) AS Flags FROM flag_table;
PostgreSQL:
SELECT ID, STRING_AGG(flag_name, ', ') AS Flags FROM ( SELECT ID, UNNEST(ARRAY['Flag1', 'Flag2', 'Flag3']) AS flag_name, UNNEST(ARRAY[Flag1, Flag2, Flag3]) AS flag_value FROM flag_table ) sub WHERE flag_value = TRUE GROUP BY ID;
方法2:Python Pandas实现
用Pandas处理表格数据的代码示例:
import pandas as pd # 构造输入数据 data = { 'ID': [1, 2], 'Flag1': [True, False], 'Flag2': [False, True], 'Flag3': [True, True] } df = pd.DataFrame(data) # 生成Flags列 df['Flags'] = df.apply( lambda row: ', '.join(col for col in df.columns if col.startswith('Flag') and row[col]), axis=1 ) # 提取目标列 result_df = df[['ID', 'Flags']] print(result_df)
运行后输出结果与期望表格一致。
内容的提问来源于stack exchange,提问作者SQLUser
相关产品推荐
相关产品推荐

