SQL CASE THEN 语句,其中 ID 具有多个值

Posted

技术标签:

【中文标题】SQL CASE THEN 语句,其中 ID 具有多个值【英文标题】:SQL CASE THEN statement where ID has multiple values 【发布时间】:2020-01-08 16:28:55 【问题描述】:

如果他们拥有汽车或卡车,我必须编写一个查询以获取带有标志的个人 ID 的最终输出。

预期输出:

Person_ID | Truck | Car 
   1         Y       Y

我编写的查询从具有多个 ID 的表中提取数据,因此输出的 ID 重复。

基础数据:

SELECT DISTINCT PERSON_ID, VEHICLE_TYPE 
FROM CARS

输出:

PERSON_ID | VEHICLE_TYPE
  1         Car
  1         Truck

我的查询:

SELECT PERSON_ID, 
CASE WHEN VEHICLE_TYPE = 'TRUCK' THEN 'Y' ELSE 'N' END AS TRUCK,
CASE WHEN VEHICLE_TYPE = 'CAR' THEN 'Y' ELSE 'N' END AS CAR
FROM (
SELECT DISTINCT PERSON_ID, VEHICLE_TYPE
FROM CARS
)

最终输出:

Person_ID | Truck | Car 
1           Y       N
1           N       Y

此人同时拥有卡车和汽车,但 ID 被重复。有没有办法解决这个问题?

【问题讨论】:

您正在尝试将多行转换为多列的单行称为透视数据。不幸的是,Db2 没有内置函数来执行此操作。 @GMB 的回答向您展示了手动操作的方法... 【参考方案1】:

你可以做条件聚合:

select 
    person_id,
    max(case when vehicle_type = 'TRUCK' then 'Y' else 'N' end) truck,
    max(case when vehicle_type = 'CAR' then 'Y' else 'N' end) car
from cars
group by person_id

【讨论】:

以上是关于SQL CASE THEN 语句,其中 ID 具有多个值的主要内容,如果未能解决你的问题,请参考以下文章

SQL语句中case,when,then的用法

sql 中 case when 语法

SQL中case when then用法

SQL语句case when

SQL语句中case,when,then的用法

case when用法