我目前有一个类似于以下结构的数据库:
Name | v_BirthDate | v_Drivers_License | v_SSN
-----------------------------------------------
Anna | 1 | 0 | 1
Bob | 0 | 1 | 0
Cal | 1 | 1 | 1
Dave | 0 | 0 | 1
数据库的基本思想是查看如何在系统中验证人员;该人是否已使用其出生日期,驾照号码或社交身份在系统中得到验证。
我想做的是为每个人排一行,并创建另一列,以逗号分隔的格式显示已用验证方法的列表。
类似的东西:
Name | v_BirthDate | v_Drivers_License | v_SSN | list
-----------------------------------------------------------
Anna | 1 | 0 | 1 | BirthDate,SSN
Bob | 0 | 1 | 0 | Drivers_License
Cal | 1 | 1 | 1 | BirthDate,Drivers_License,SSN
Dave | 0 | 0 | 1 | SSN
我使用WITH子句创建了一个临时表,该表将1更改为字符串变量,例如BirthDate,Drivers_License和SSN。但是,我不确定如何创建列表列。预先谢谢你。
答案 0 :(得分:0)
您可以使用巨型case
和一些字符串逻辑来完成此操作:
select t.*,
trim(leading ',' from
(case when v_BirthDate = 1 then ',BirthDate' else '' end) ||
(case when v_Drivers_License = 1 then ',Drivers_License' else '' end) ||
(case when v_SSN = 1 then ',v_SSN' else '' end)
) as list
from t;
这将创建一个字符串,该字符串由每个组件组成,后跟一个逗号。 trim()
删除了逗号。
答案 1 :(得分:0)
我会做类似的事情:
with x as (
select
name, v_birthdate, v_drivers_license, v_ssn,
case when v_birthdate = 1 then ',BirthDate' else '' end ||
case when v_drivers_license = 1 then ',Drivers_License' else '' end ||
case when v_ssn = 1 then ',SSN' else '' end as list
from my_table
)
select
name, v_birthdate, v_drivers_license, v_ssn,
case when list = '' then list else substr(list, 2) end as list
from x;