Sql Unpivot:定义不明确的列

Sql Unpivot:定义不明确的列,sql,oracle,Sql,Oracle,当运行下面的语句时,我得到了“定义不明确的列” 请帮我做这件事 SELECT * FROM ( SELECT activity_type, COUNT(decode(CASE WHEN activity_type = 'K' then 1 when activity_type='BH' then 1 END,1,1)) Holiday, COUNT(decode(CASE WHEN activity_type = 'SL' then 1 when activi

当运行下面的语句时,我得到了“定义不明确的列”

请帮我做这件事

SELECT *
FROM
    (


  SELECT  activity_type,
      COUNT(decode(CASE WHEN activity_type = 'K' then 1 when activity_type='BH' then 1 END,1,1))  Holiday,
  COUNT(decode(CASE WHEN activity_type = 'SL' then 1 when activity_type='2' then 1 END,1,1)) Leave,
  COUNT(CASE WHEN activity_type = 'AL'  then 1 ELSE NULL END) Annual,
  COUNT(CASE WHEN activity_type = 'OL'  then 1 ELSE NULL END) Other_no,
  COUNT(CASE WHEN activity_type = 'IM'  then 1 ELSE NULL END) InternalMeeting,
  COUNT(CASE WHEN activity_type = 'TR'  then 1 ELSE NULL END) Training,
  COUNT(CASE WHEN activity_type = 'ISM'  then 1 ELSE NULL END) Office,
  COUNT(decode(CASE WHEN activity_type = 'CS' then 1 when activity_type='10' then 1 when activity_type='SAV'then 1 END,1,1,1)) ExternalMeeting,
  COUNT(CASE WHEN activity_type = '9'  then 1 ELSE NULL END) Symposium,
  COUNT(CASE WHEN activity_type = '12'  then 1 ELSE NULL END) Transit,
  COUNT(CASE WHEN activity_type = 'H'  then 1 ELSE NULL END) Result,
  COUNT(CASE WHEN activity_type = '10'  then 1 ELSE NULL END) CME
    FROM  planner_activity pa
    WHERE tenant_id=500020
       GROUP BY activity_type
     )
     UNPIVOT
     (
  monthly_count
       FOR activity_type IN (HOLIDAY,LEAVE,ANNUAL,OTHER_NO,INTERNALMEETING,TRAINING,OFFICE,EXTERNALMEETING,SYMPOSIUM,TRANSIT,RESULT,CME)
  )
我想计算结果的和请帮帮我

输出应为:

Holiday 1
Leave   1
Anuual  2
Other_no 1
Noof days 5
非常感谢你的帮助


Sunitha…

我不知道为什么会出现这种错误,但为什么不为此只做一个
分组?大概是这样的:

SELECT grp, count(*)
FROM (SELECT (CASE WHEN activity_type = 'SL' then 'Leave'
                   WHEN activity_type = 'AL' then 'Annual'
                   WHEN activity_type = 'OL'  then 'Other_no'
                   WHEN activity_type = 'IM'  then 'InternalMeeting'
                   WHEN activity_type = 'TR'  then 'Training'
                   WHEN activity_type = 'ISM'  then 'Office'
                   WHEN activity_type IN ('CS', '10', 'SAV') then 'ExternalMeeting'
                   WHEN activity_type = '9' then 'Symposium'
                   WHEN activity_type = '12'  then 'Transit'
                   WHEN activity_type = 'H'  then 'Result'
                   WHEN activity_type = '10'  then 'CME'
              END) as grp, pa.*
      FROM planner_activity pa
      WHERE tenant_id = 500020
     ) t
GROUP BY grp;
尝试更改为:

SELECT *
FROM
    (


  SELECT  activity_type,
      COUNT(decode(CASE WHEN activity_type = 'K' then 1 when activity_type='BH' then 1 END,1,1))  Holiday,
  COUNT(decode(CASE WHEN activity_type = 'SL' then 1 when activity_type='2' then 1 END,1,1)) Leave,
  COUNT(CASE WHEN activity_type = 'AL'  then 1 ELSE NULL END) Annual,
  COUNT(CASE WHEN activity_type = 'OL'  then 1 ELSE NULL END) Other_no,
  COUNT(CASE WHEN activity_type = 'IM'  then 1 ELSE NULL END) InternalMeeting,
  COUNT(CASE WHEN activity_type = 'TR'  then 1 ELSE NULL END) Training,
  COUNT(CASE WHEN activity_type = 'ISM'  then 1 ELSE NULL END) Office,
  COUNT(decode(CASE WHEN activity_type = 'CS' then 1 when activity_type='10' then 1 when activity_type='SAV'then 1 END,1,1,1)) ExternalMeeting,
  COUNT(CASE WHEN activity_type = '9'  then 1 ELSE NULL END) Symposium,
  COUNT(CASE WHEN activity_type = '12'  then 1 ELSE NULL END) Transit,
  COUNT(CASE WHEN activity_type = 'H'  then 1 ELSE NULL END) Result,
  COUNT(CASE WHEN activity_type = '10'  then 1 ELSE NULL END) CME
    FROM  planner_activity pa
    WHERE tenant_id=500020
       GROUP BY activity_type
     )
     UNPIVOT
     (
  monthly_count
       FOR new_activity_type IN (HOLIDAY,LEAVE,ANNUAL,OTHER_NO,INTERNALMEETING,TRAINING,OFFICE,EXTERNALMEETING,SYMPOSIUM,TRANSIT,RESULT,CME)
  )

activity\u type
在这个查询中被使用了两次,这可能是导致问题的原因。

你好,戈登,非常感谢你的回复。.我不能像单独一行那样得到下面的结果。.Noofdays Sum(count)…非常感谢你的帮助你解决了问题和解决方案。他最初的子句“FOR activity_type IN”引用了源表中的一列,此时他需要标识一个新列来保存值(例如假日、假期、年度等)。