Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/78.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/database/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
SQL CASE THEN语句,其中ID有多个值_Sql_Database_Db2_Case When - Fatal编程技术网

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

SQL CASE THEN语句,其中ID有多个值,sql,database,db2,case-when,Sql,Database,Db2,Case When,如果一个人拥有一辆汽车或卡车,我必须编写一个查询以获得带有标志的一个人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

如果一个人拥有一辆汽车或卡车,我必须编写一个查询以获得带有标志的一个人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

此人有一辆卡车和一辆汽车,但身份证正在重复。有没有办法解决这个问题

您可以执行条件聚合:

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

您可以执行条件聚合:

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

您尝试将多行转换为具有多列的单行的操作称为数据透视。不幸的是,Db2没有内置函数来实现这一点@GMB的答案向您展示了手动操作的方法…您试图做的是,将多行转换为具有多列的单行,称为数据透视。不幸的是,Db2没有内置函数来实现这一点@GMB的答案告诉你手动操作的方法。。。