当前位置: 首页 > 面试题库 >

Oracle 10g中的数据透视表/交叉表查询(动态列号)

洪博涛
2023-03-14
问题内容

我有这个表视图

UserName      Product     NumberPurchaces
--------      -------     ---------------
'John Doe'    'Chair'     4
'John Doe'    'Table'     1
'Jane Doe'    'Table'     2
'Jane Doe'    'Bed'       1

如何创建将在Oracle 10g中提供此透视图视图的查询?

 UserName   Chair   Table   Bed
 --------   -----   -----   ---
 John Doe   4       1       0
 Jane Doe   0       2       1

有没有办法动态地做到这一点?我看到了很多方法(解码,PL / SQL循环,联合,11g数据透视)

但根据上述示例,我尚未找到适合我的方法

编辑 :我不知道在开发时间产品的数量或类型,所以这必须是动态的


问题答案:

Oracle 11g是第一个支持PIVOT / UNPIVOT的,因此您必须使用:

  SELECT t.username,
         MAX(CASE WHEN t.product = 'Chair' THEN t.numberpurchases ELSE NULL END) AS chair,
         MAX(CASE WHEN t.product = 'Table' THEN t.numberpurchases ELSE NULL END) AS tbl,
         MAX(CASE WHEN t.product = 'Bed' THEN t.numberpurchases ELSE NULL END) AS bed
    FROM TABLE t
GROUP BY t.username

您可以使用DECODE,但是从9i开始就支持CASE。



 类似资料:
  • 问题内容: 问题1: 我有一个具有以下结构和数据的表: 我想以以下格式显示这些记录: 我知道我需要使用交叉表/数据透视查询来获得此显示。为此,我基于对它的有限知识对其进行了尝试。以下是我的查询: 根据此查询,我得到以下显示: 任何人都可以帮助我对查询进行适当的更改以获取单行而不是如上所述的多行记录。 问题2: 还有一种方法可以获取特定字段的值作为列的名称。正如你可以在上面看到我有,,…作为标题。取

  • 问题内容: 我目前有一个使用以下sql的硬编码视图: 我的问题是是否可以从角色表中的记录动态生成角色列。 问题答案: 您 可以 做您想做的事,但是我不确定 为什么 要这么做。获得动态列别名后,如何计划引用它们?也就是说,如果您从数据库中提取列别名,那么您将如何使用它们呢?我可能错过了您提出问题的原因。 无论如何,我假设您具有这样的结构: 由此,您可以获得有关用户及其角色的信息: 您还可以为特定角色

  • 问题内容: 我知道这个话题无处不在,但我无法使其正常运行。这可能很简单。 这是基本查询后的数据示例: 我想要的是列名称是动态的: 到目前为止,根据我的研究,这是我整理的代码: 当我运行查询时,出现语法错误。 问题答案: 使用动态SQL 结果

  • 问题内容: 我正在使用下表存储产品数据: 使用以下查询从两个表中选择记录 一切都正常工作:) 因为我动态地填充了“附加”表,所以如果查询也是动态的,那就很好了。这样,我不必每次输入新的字段名和字段值就更改查询。 问题答案: MySQL中动态执行此操作的唯一方法是使用Prepared语句。这是一篇关于它们的好文章: 动态数据透视表(将行转换为列) 您的代码如下所示: 观看演示 注意:GROUP_CO

  • 问题内容: 我正在使用SQL Server 2008,并且希望将数据转换为: 资料集: 所需结果: 目前,我正在执行以下操作,然后将所需的列粘贴到Excel中: 但是,并非所有匹配的行都不能仅仅并排击打表。对于没有Result的列,我希望显示NULL来填充行以使它们都具有相同数量的记录。 我查了一下PIVOT,但我认为这在这里不起作用…这种数据转换称为什么类型?我不认为这是交叉表… 谢谢! 问题答

  • 问题内容: 我正在使用MySQL。这是我的桌子 我需要一个选择查询来显示类似这样的表。 问题答案: 您可以使用此查询- 它产生您想要的结果。但是,如果您想动态地进行操作,请参阅这篇文章“自动执行数据透视表查询”-http: //www.artfulsoftware.com/infotree/queries.php#523,或者该链接- 动态数据透视表。