首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Oracle数据透视选项

Oracle数据透视选项
EN

Stack Overflow用户
提问于 2018-09-10 12:30:15
回答 1查看 30关注 0票数 0

我有下面的枢轴和输出。我想展示下面的内容。

  1. 删除列周围的括号?
  2. 添加X和Null的指示剂代替1和0?

SQL:

代码语言:javascript
复制
SELECT DISTINCT
*
   FROM (
          SELECT D.ID, D.DI, A.ID
          FROM  A
          LEFT JOIN  AD                  ON A.ID = AD.ID
          LEFT JOIN  D                        ON AD.ID = D.ID
          WHERE 1=1
          AND A.ID = 890929
                                           )
          PIVOT
            (
           COUNT(ID) 
            FOR DI IN  ( 'Low med','Soft','Regular','High Med','Other')
              )

查询输出:

代码语言:javascript
复制
ID  'Low med' 'Soft' 'Regular'  'High Med'  'Other'
1      1         1      0           0          1

预期产出:

代码语言:javascript
复制
ID  LOW_MED    SOFT REGULAR        HIGH_MED       OTHER
1      X         X      NULL           NULL          X
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-09-10 12:36:34

您可以通过混叠旋转表达式来删除单引号(不是括号,即()):

代码语言:javascript
复制
FOR DI IN ('Low med' as low_med, 'Soft' as soft, 'Regular' as regular,
  'High Med' as high_med,'Other' as other)

然后,您可以在第二部分中使用这些别名,但是可以将大小写表达式添加到主查询中:

代码语言:javascript
复制
SELECT id,
  case when low_med = 1 then 'X' else null end as low_med,
  case when soft = 1 then 'X' else null end as soft,
  case when regular = 1 then 'X' else null end as regular,
  case when high_med = 1 then 'X' else null end as high_med,
  case when other = 1 then 'X' else null end as other
FROM (
  SELECT D.ID, D.DI, A.ID
  FROM  A
  LEFT JOIN  AD ON A.ID = AD.ID
  LEFT JOIN  D ON AD.ID = D.ID
  WHERE 1=1
  AND A.ID = 890929
)
PIVOT
(
  COUNT(ID) 
  FOR DI IN ('Low med' as low_med, 'Soft' as soft, 'Regular' as regular,
    'High Med' as high_med,'Other' as other)
)
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52257845

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档