- html - 我的下拉菜单的内容关闭得太快
- c# - 使用 Html Agility Pack 从网页中的表中获取值而不使用 "SelectNode'
- html - 内容容器下的 CSS 下拉菜单
- html - 如何停止嵌套列表重叠父列表?
我目前拥有的:
Team User Apples Oranges Pears
Red Adam 4 5 6
Red Avril 11 12 13
Blue David 21 22 23
需要什么:
Team User Product Count
Red Adam Apples 4
Red Adam Oranges 5
Red Adam Pears 6
Red Avril Apples 11
Red Avril Oranges 12
Red Avril Pears 13
Blue David Apples 21
....
这将使用 Oracle SQL 来实现。我知道这可以使用 UNPIVOT 来完成,但是我的 Oracle SQL 版本太旧,不支持这种方法。有人可以举例说明如何使用 CROSS APPLY 或等效方法实现此目的吗? 计数变化取决于团队-用户-产品组合,并且产品类型的数量将来可能会略有变化,因此可能需要可扩展的解决方案。
这是时间敏感的,因此非常感谢您的帮助。
最佳答案
您可以使用交叉连接和一些 case 语句来执行此操作,方法是使用一个虚拟子查询,该子查询包含与您想要取消透视的列相同的行数(因为您希望每一列都进入其自己的行),例如所以:
WITH your_table AS (SELECT 'Red' Team, 'Adam' usr, 4 Apples, 5 Oranges, 6 Pears FROM dual UNION ALL
SELECT 'Red' Team, 'Avril' usr, 11 Apples, 12 Oranges, 13 Pears FROM dual UNION ALL
SELECT 'Blue' Team, 'David' usr, 21 Apples, 22 Oranges, 23 Pears FROM dual)
-- end of mimicking your table. See SQL below:
SELECT yt.team,
yt.usr,
CASE WHEN d.id = 1 THEN 'Apples'
WHEN d.id = 2 THEN 'Oranges'
WHEN d.id = 3 THEN 'Pears'
END product,
CASE WHEN d.id = 1 THEN yt.apples
WHEN d.id = 2 THEN yt.oranges
WHEN d.id = 3 THEN yt.pears
END count_of_product
FROM your_table yt
CROSS JOIN (SELECT LEVEL ID
FROM dual
CONNECT BY LEVEL <= 3) d -- number of columns to unpivot
ORDER BY team, usr, product;
TEAM USR PRODUCT COUNT_OF_PRODUCT
---- ----- ------- ----------------
Blue David Apples 21
Blue David Oranges 22
Blue David Pears 23
Red Adam Apples 4
Red Adam Oranges 5
Red Adam Pears 6
Red Avril Apples 11
Red Avril Oranges 12
Red Avril Pears 13
这样做意味着您只需遍历表格一次,而不是如果您使用 union all 方法多次。
预计到达时间:这是 Aleksej 所指的方法 - 我建议针对您的数据集(希望数据足够大以具有代表性)测试这两种方法,以查看哪种方法性能更高:
WITH your_table AS (SELECT 'Red' Team, 'Adam' usr, 4 Apples, 5 Oranges, 6 Pears FROM dual UNION ALL
SELECT 'Red' Team, 'Avril' usr, 11 Apples, 12 Oranges, 13 Pears FROM dual UNION ALL
SELECT 'Blue' Team, 'David' usr, 21 Apples, 22 Oranges, 23 Pears FROM dual)
-- end of mimicking your table. See SQL below:
SELECT yt.team,
yt.usr,
CASE WHEN LEVEL = 1 THEN 'Apples'
WHEN LEVEL = 2 THEN 'Oranges'
WHEN LEVEL = 3 THEN 'Pears'
END product,
CASE WHEN LEVEL = 1 THEN yt.apples
WHEN LEVEL = 2 THEN yt.oranges
WHEN LEVEL = 3 THEN yt.pears
END count_of_product
FROM your_table yt
CONNECT BY PRIOR team = team
AND PRIOR usr = usr
AND PRIOR sys_guid() IS NOT NULL
AND LEVEL <= 3
ORDER BY team, usr, product;
TEAM USR PRODUCT COUNT_OF_PRODUCT
---- ----- ------- ----------------
Blue David Apples 21
Blue David Oranges 22
Blue David Pears 23
Red Adam Apples 4
Red Adam Oranges 5
Red Adam Pears 6
Red Avril Apples 11
Red Avril Oranges 12
Red Avril Pears 13
关于sql - 没有 UNPIVOT 的 Oracle SQL 列到行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41845825/
我的 Excel 工作表中有大量数据需要重新格式化。我正在尝试使用数据透视表来实现此目的,但我不确定是否可行。 这是当前数据集(SKU 目前是唯一的): 我需要它看起来更像这样(其中 SKU 不是唯一
如何编写一个查询,将始终具有 1 行和多列的表取消透视到具有 2 列的结果集:column_name 和 value。我知道表格的底层结构是真正的问题所在,但我无法改变这一点。此查询也必须不知道所述表
我发现 UNPIVOT 能够自动排除具有 NULL 值的字段。但是,CROSS APPLY-VALUES 方法无法做到这一点。有谁知道如何从 CROSS APPLY-VALUES 中自动排除 NULL
我有一个带有 UNPIVOT 的 SELECT 语句 SELECT dycd_acnam, dycd_dynam, dycd_value FROM GCATT.dbo.tblDaycode UNPIV
您好,我有以下 mysql 数据 INSERT INTO `monthly` (`id`, `year`, `stat_id`, `cat_id`, `January`, `February`, `M
我有一张看起来像这样的 table 目标是在 Limit 列(Limit1、Limit2、Limit3...等)中找到最小值。 为此,我使用了 UNPIVOT 函数。 但问题是有些值是空字符串。结果,
我正在尝试对 mdsb.sys.database 表中的某些列进行 UNPIVOT,但在处理某些列时遇到了一些问题。我试图在 UNPIVOTing 表之前在 CTE 中将所有列转换为 NVARCHAR
我在对数据类型不完全相同的列使用 unpivot 时遇到问题,并且我无法弄清楚如何动态转换列,因为 UNPIVOT 的语法似乎不支持它。 考虑这个例子: DECLARE @People TABLE (
我正在转换此旧表中的数据: 电话(ID int、PhoneNumber、IsCell 位、IsDeskPhone 位、IsPager 位、IsFax 位) 这些位字段不可为空,并且所有四个位字段都可能
我正在尝试根据目标列中的值将多个列反透视/合并为一个值。 给定以下示例数据: CREATE TABLE SourceData ( Id INT ,Column1Text VARCHAR(
我正在尝试根据目标列中的值将多个列反透视/合并为一个值。 给定以下示例数据: CREATE TABLE SourceData ( Id INT ,Column1Text VARCHAR(
我有一个如下所示的数据框:我想解开这个数据框,以便相同 I_S 值的不同 IV 值进入单独的列,IC 列也是如此。 df_1.columns Index(['I_Y', 'I_DY', 'I_H',
我目前有一个 DataFrame 布局为: Jan Feb Mar Apr ... 2001 1 12 12 19 2002 9 ... 2003 ..
我有一个包含值列的表。该值可以是一个值,也可以是用逗号分隔的多个值: id | assess_id | question_key | item_value ---+-----------+------
我正在寻找“反透视”表,但我不确定最好的方法是什么。此外,这些值用“;”分隔。我列出了我正在查看的示例: 列_A 列_B 列_C Column_D 000 A B C D 01;02;03;0
所以,我做了很多搜索和摆弄,但找不到解决方案。也许我的情况很独特——或者更有可能我只是不知道我到底在做什么。我比刚开始时更接近了,所以这令人振奋。不管怎样 - 我们来了智囊团 - 非常感谢任何帮助。
不用说,我在过去几天试图理解 pivot/unpivot 主题,但没有希望。我不明白什么是 pivot 什么是 unpivot。我有这张 table :此表称为 Natalie_Playground。
我有一行数据想要垂直化。我相信 UNPIVOT 是我的最佳选择,但我一直无法让它发挥作用。我的行有以下数据: id | Qualifier 1 | Qualifier 2 | Qualifier
在我的应用程序中,我使用了如下商店产品描述值: ID BILLNO CUS_NAME DATE TOT_BAL S1 S2 S3 S4 D1 D2
我有一个包含大约 20 列和最多 100 行的汇总表,但我想将其转换为平面列表以便导入数据库。 This solution在我的情况下不能正常工作,我对 JS 的了解远远低于适当调整它的能力。 Exa
我是一名优秀的程序员,十分优秀!