作为结果集的字段 headers in mysql 8
Fields as result set headers in mysql 8
下面是我的数据片段,
empid CategoryName Type value
1 Accommodation Deduction DEDUCTION -100.0000
1 Canteen Deduction DEDUCTION -200.0000
1 Housing ADDITION 3000.0000
1 Transport Allowance ADDITION 2000.0000
empid 将是员工 ID,数据集中还有其他员工 ID,但所有员工都有相似的数据。
我的目标是将各种薪酬类别显示为查询结果中的列,例如,
Accommodation Deduction Canteen Deduction Housing Transport Allowance
-100.0000 -200.0000 3000.0000 2000.0000
我正在使用以下查询,
select
MAX(CASE
WHEN CategoryName = 'Accommodation Deduction' THEN pi.value
ELSE 0
END) AS 'Accommodation Deduction',
MAX(CASE
WHEN CategoryName = 'Canteen Deduction' THEN pi.value
ELSE 0
END) AS 'Canteen Deduction',
MAX(CASE
WHEN CategoryName = 'Housing' THEN pi.value
ELSE 0
END) AS 'Housing',
MAX(CASE
WHEN CategoryName = 'Transport Allowance' THEN pi.value
ELSE 0
END) AS 'Transport Allowance' from Report pi group by empid;
扣除类别显示的值为零,这不应该,
Accommodation Deduction Canteen Deduction Housing Transport Allowance
0.0000 0.0000 3000.0000 2000.0000
因为CASE
语句的ELSE 0
分支,所以条件MAX()
returns0
有负值的列。
您可以将这些变成 MIN()
s:
select empid
MIN(CASE WHEN CategoryName = 'Accommodation Deduction' THEN pi.value ELSE 0 END) AS Accommodation_Deduction,
MIN(CASE WHEN CategoryName = 'Canteen Deduction' THEN pi.value ELSE 0 END) AS Canteen_Deduction,
MAX(CASE WHEN CategoryName = 'Housing' THEN pi.value ELSE 0 END) AS Housing,
MAX(CASE WHEN CategoryName = 'Transport Allowance' THEN pi.value ELSE 0 END) AS Transport_Allowance
from Report pi
group by empid;
下面是我的数据片段,
empid CategoryName Type value
1 Accommodation Deduction DEDUCTION -100.0000
1 Canteen Deduction DEDUCTION -200.0000
1 Housing ADDITION 3000.0000
1 Transport Allowance ADDITION 2000.0000
empid 将是员工 ID,数据集中还有其他员工 ID,但所有员工都有相似的数据。
我的目标是将各种薪酬类别显示为查询结果中的列,例如,
Accommodation Deduction Canteen Deduction Housing Transport Allowance
-100.0000 -200.0000 3000.0000 2000.0000
我正在使用以下查询,
select
MAX(CASE
WHEN CategoryName = 'Accommodation Deduction' THEN pi.value
ELSE 0
END) AS 'Accommodation Deduction',
MAX(CASE
WHEN CategoryName = 'Canteen Deduction' THEN pi.value
ELSE 0
END) AS 'Canteen Deduction',
MAX(CASE
WHEN CategoryName = 'Housing' THEN pi.value
ELSE 0
END) AS 'Housing',
MAX(CASE
WHEN CategoryName = 'Transport Allowance' THEN pi.value
ELSE 0
END) AS 'Transport Allowance' from Report pi group by empid;
扣除类别显示的值为零,这不应该,
Accommodation Deduction Canteen Deduction Housing Transport Allowance
0.0000 0.0000 3000.0000 2000.0000
因为CASE
语句的ELSE 0
分支,所以条件MAX()
returns0
有负值的列。
您可以将这些变成 MIN()
s:
select empid
MIN(CASE WHEN CategoryName = 'Accommodation Deduction' THEN pi.value ELSE 0 END) AS Accommodation_Deduction,
MIN(CASE WHEN CategoryName = 'Canteen Deduction' THEN pi.value ELSE 0 END) AS Canteen_Deduction,
MAX(CASE WHEN CategoryName = 'Housing' THEN pi.value ELSE 0 END) AS Housing,
MAX(CASE WHEN CategoryName = 'Transport Allowance' THEN pi.value ELSE 0 END) AS Transport_Allowance
from Report pi
group by empid;