大小写列在口头中为一行

  • 本文关键字:一行 大小写 oracle
  • 更新时间 :
  • 英文 :

SELECT 
t.LAST_NAME,
MAX (
CASE
WHEN TSI.SERVICE = 1 THEN 'Short Course – Facilitation only'
END)
Col1,
MAX (CASE WHEN TSI.UNIT = 1 THEN 'Dint' END) rate1,
MAX (
CASE
WHEN TSI.SERVICE = 2 THEN 'Short Course – Assessment only'
END)
Col2,
MAX (CASE WHEN TSI.UNIT = 3 THEN 'Dillnt' END) rate3,
MAX (
CASE WHEN TSI.SERVICE = 3 THEN 'Short Course – Assessment ' END)
Col3

FROM LMS$TRAINERS T
JOIN
trainer_service_info TSI
ON     T.trainer_id = TSI.trainer_id
AND COMPANY_ID = :P0_COMPANY_ID
AND status = 'A'
GROUP BY t.TRAINER_ID,
t.FIRST_NAME,
t.LAST_NAME,
t.ID_NUM,
t.DATE_OF_BIRTH,
t.CLOCK_NO,
t.CONTACT_NO,
TSI.Service,
TSI.UNIT,
TSI.RATE,
t.language,
t.rating,
t.ID_TYPE,
t.LMS_SPECIALITY_AREA,
t.EMAIL_ADDRESS,
t.STATUS_REASON,
t.DEFAULT_BRANC_ID

上面的代码生成 - 修剪以便于演示

Name   Col1                Rate1     Col2               Rate3
Maruma Facilitation only    Dint                
Maruma                               Assessment only    Dillnt  

希望它生产

Name   Col1                Rate1     Col2               Rate3   
Maruma Facilitation only    Dint    Assessment only     Dillnt

目前,您的分组依据是一个巨大的列列表:

t.TRAINER_ID,
t.FIRST_NAME,
t.LAST_NAME,
t.ID_NUM,
t.DATE_OF_BIRTH,
t.CLOCK_NO,
t.CONTACT_NO,
TSI.Service,
TSI.UNIT,
TSI.RATE,
t.language,
t.rating,
t.ID_TYPE,
t.LMS_SPECIALITY_AREA,
t.EMAIL_ADDRESS,
t.STATUS_REASON,
t.DEFAULT_BRANC_ID

它不需要,并且正在导致此"问题"。更改 GROUP BY,以便仅按t.LAST_NAME(选择列表中唯一不包含在聚合表达式中的成员(进行分组

否则,您分组的其他值中会有一些其他变化,其中存在某些笛卡尔积

注意:这意味着您最终可能会丢失或混合数据 - 当前有两行具有相同的姓氏,但其他一些细节不同,例如名字。MAX(( 表达式不会尝试保留同一行中的数据。这意味着,如果你有两个人,38岁的莎拉·马鲁玛(Sarah Maruma(住在阿富汗,约翰·马鲁马(John Maruma(19岁,住在津巴布韦,你最终会得到一排混合价值观:

Maruma, 38, 津巴布韦

如果这没问题,那就继续吧。如果这不行,则将当前在分组依据中的每一列也放入您的选择列表中,并查看结果。找出变体发生的位置并决定您要采取的操作

通常,您应该最终得到一个查询,其中 GROUP BY 中的所有列也列在 SELECT 中(而不是在任何聚合函数中(

最新更新