带有大小写的Oracle SQL查询垂直到水平[重复]

Posted

技术标签:

【中文标题】带有大小写的Oracle SQL查询垂直到水平[重复]【英文标题】:Oracle SQL Query Vertical to Horizontal with case [duplicate] 【发布时间】:2016-12-20 18:43:14 【问题描述】:

我的用户表有两列用户和组,一个用户可以有多个组

User  | Group
--------------
User1 | Group1
User1 | Group2
User2 | Group1
User2 | Group2
User3 | Group1
User4 | Group2

我正在尝试编写 sql 以将上面的表格数据转换为以下格式。

User    | Group1        | Group2
---------------------------------
User1   |   Yes         |   Yes
User2   |   Yes         |   Yes
User3   |   Yes         |   No
User4   |   No          |   Yes

需要帮助。 谢谢

【问题讨论】:

您是否尝试过编写查询以获得结果?您应该尝试编辑问题。 @krokodilko 是的,谢谢 【参考方案1】:

我认为您可以使用 CASE 和分组来做到这一点:

SELECT user,
CASE WHEN MIN(`group`) = 'Group1' THEN 'Yes' ELSE 'No' END AS Group1,
CASE WHEN MAX(`group`) = 'Group2' THEN 'Yes' ELSE 'No' END AS Group2
FROM t
GROUP BY user

【讨论】:

示例中未包含该内容。可能值得对 OP 提出后续问题,而不是对答案投反对票...【参考方案2】:
with
     test_data ( usr , grp ) as (
       select 'User1', 'Group1' from dual union all
       select 'User1', 'Group2' from dual union all
       select 'User2', 'Group1' from dual union all
       select 'User2', 'Group2' from dual union all
       select 'User3', 'Group1' from dual union all
       select 'User4', 'Group2' from dual
     )
-- end of test data; the query begins below this line
select   usr,
         case when count(case when grp = 'Group1' then 1 end) > 0 
              then 'Yes' else 'No' end as grp1,
         case when count(case when grp = 'Group2' then 1 end) > 0 
              then 'Yes' else 'No' end as grp2
from     test_data
group by usr
order by usr    --   order by is optional
;

USR    GRP1  GRP2
-----  ----  ----
User1  Yes   Yes
User2  Yes   Yes
User3  Yes   No
User4  No    Yes

【讨论】:

【参考方案3】:

试试这个:

select usr,
max(case when grp = 'Group1' then 'Yes' else 'No' end) grp1,
max(case when grp = 'Group2' then 'Yes' else 'No' end) grp2
from table
group by usr;

P.S.:避免在表格中使用像 USER 这样的关键字。

【讨论】:

这不完全满足要求 - 当找不到该用户的组时,OP 的所需输出显示 'No' 而不是 NULL

以上是关于带有大小写的Oracle SQL查询垂直到水平[重复]的主要内容,如果未能解决你的问题,请参考以下文章

SQL Pivot - 查询结果垂直到水平

在带有悬停和背景的容器中垂直和水平居中调整大小的图像

用SQL查询创建水平垂直直方图

Oracle SQL:带有 REGEXP_SUBSTR 表达式的插入查询很长(拆分字符串)

修复了带有水平滚动条和垂直滚动条的标题表

iPad不会触发从垂直到水平的调整大小事件?