下表是从包含列ID,名称,器官和年龄的另一个表创建的。 “器官”栏中的值是指定器官和条件的代码。
使用CASE我做了一个这样的表:
--------------------------------------------------------
ID NAME Heart Brain Lungs Kidneys AGE
1318 Joe Smith NULL NULL NULL NULL 50
1318 Joe Smith NULL NULL NULL NULL 50
1318 Joe Smith NULL NULL NULL Below 50
1318 Joe Smith NULL NULL NULL Below 50
1318 Joe Smith NULL NULL Above NULL 50
1318 Joe Smith NULL NULL Above NULL 50
1318 Joe Smith Average NULL NULL NULL 50
1318 Joe Smith Average NULL NULL NULL 50
--------------------------------------------------------
我想查询此表并获得以下结果:
--------------------------------------------------------
1318 Joe Smith Average NULL Above Below 50
--------------------------------------------------------
换句话说,我想根据每个记录的唯一值创建一个记录 列。
答案 0 :(得分:4)
假设每个器官可以只有一个值或null
,如示例数据所示,max
聚合函数应该可以解决问题:
SELECT id, name,
MAX(heart), MAX(brain), MAX(lungs), MAX(kidneys),
age
FROM my_table
GORUP BY id, name, age
答案 1 :(得分:1)
select id,name,heart=(select distinct(heart) from organ where id=1318 and heart is not null)
,brain= (select distinct(brain) from organ where id=1318 and brain is not null)
,lungs=(select distinct(lungs) from organ where id=1318 and lungs is not null)
,kidneys = (select distinct(kidneys) from organ where id=1318 and kidneys is not null)
,age from organ where id=1318
答案 2 :(得分:0)
您要在此处执行的操作是按ID和NAME汇总结果。这意味着每个唯一(ID,NAME)对只有一行。这可以使用GROUP BY
关键字来实现。
现在,根据您使用的数据库(MySQL,DB2,...),此查询可能看起来有点不同,但您可以尝试这个:
SELECT
ID, NAME,
MAX(Heart), MAX(Brain), MAX(Lungs), MAX(Kidneys), MAX(AGE)
FROM MYTABLE GROUP BY ID, NAME
这将为您提供每列的“最大”值。就像我说的,根据您的数据库,这可能不适用于字符串列,因此您也可以尝试COALESCE
,它为您提供列表的第一个NOT NULL值:
SELECT
ID, NAME,
COALESCE(Heart), COALESCE(Brain), COALESCE(Lungs), COALESCE(Kidneys), COALESCE(AGE)
FROM MYTABLE GROUP BY ID, NAME