gpt4 book ai didi

sql - 一行的多个条件如果不存在则返回 NULL postgresql

转载 作者:数据小太阳 更新时间:2023-10-29 03:36:58 25 4
gpt4 key购买 nike

我有这样的架构:

[ad_id] .  [name] . [valueofname]
1 . name . "brian"
1 . age . "23"
2 . job . "IT"
2 . name . "Jack"

行名称包含多个值:年龄、姓名、生日、工作、年龄我想将其转换为:

[ad_id] .      [name]  .       [age] .              [birthday] .    [job]
[valueofad_id][valueofname] [valueofnameofage] [valueofnameofbirth] [valueofnameofjob]

我在下面做了这个查询选择来修复它,所以在我的程序中我必须得到结果 ad_id ='xxxx' 代表每个 when name =' nameagebirthdayjob '

一些 ad_id没有所有名称,正如您在架构下方看到的 ad_id= 1只有 nameage但不是 job所以我想在找不到工作时返回 NULL

 [ad_id] .  [name] . [valueofname]
1 . name . "brian"
1 . age . "23"
2 . job . "IT"
2 . name . "Jack"


select ad_id,

max(case when name = 'name' and ad_id='xxx' then valueofname end) as name,
max(case when name = 'age' and ad_id='xxx' then valueofname end) as age,
max(case when name = 'birthday' and ad_id='xxx' then valueofname end) as birthday,
max(case when name = 'job' and ad_id='xxx' then valueofname end) as job

from t
group by ad_id;

最佳答案

要展平所有 ad_id 的记录,请使用:

select ad_id,
max(case when name = 'name' then valueofname end) as name,
max(case when name = 'age'then valueofname end) as age,
max(case when name = 'birthday' then valueofname end) as birthday,
max(case when name = 'job' then valueofname end) as job
from t
group by ad_id;

要获取单个 ad_id 的结果,请添加一个 where 子句:

select ad_id,
max(case when name = 'name' then valueofname end) as name,
max(case when name = 'age'then valueofname end) as age,
max(case when name = 'birthday' then valueofname end) as birthday,
max(case when name = 'job' then valueofname end) as job
from t
where ad_id = 'xxx'
group by ad_id;

注意:如果没有包含 ad_id = 'xxx' 的行,则不会返回任何行。

关于sql - 一行的多个条件如果不存在则返回 NULL postgresql,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49853336/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com