oracle 将One-hot-encoding连接到列中值

new9mtju  于 2022-11-22  发布在  Oracle
关注(0)|答案(1)|浏览(99)

| A 列|B 栏|
| - -| - -|
| A 级|二十六 点 八|
| 乙|二十三 点 五|
| C 语言|二十二 点 五|
| A 级|二十一 点 九|
| 乙|二十三 点 一|
| C 语言|二十九 点 一|
到 这
| A 级|乙|C 语言|
| - -| - -| - -|
| 26.8 |二十三 点 五|二十二 点 五|
| 21.9 |二十三 点 一|二十九 点 一|
问题 : 从 列 A 创建 one-hot - encoded 变量 , 然后 使用 SQL 将 列 B 中 的 相应 值 插入 one-hot - encoded 变量 的 ones ( 1 ) 中 。
我 曾 尝试 在 SQL 中 使用 PIVOT , 但 没有 成功 。

yduiuuwa

yduiuuwa1#

不能 。 在 SQL ( 不仅仅 是 Oracle ) 中 , 结果 集 具有 不 确定 的 排序 , 除非 您 有 一些 数据 允许 您 对 结果 进行 排序 并 确定 哪些 (A,B,C) 三元 组 行 相关 , 否则 不 可能 确定 哪个 A 与 哪个 B 相关 。
例如 , 如果 您 有 范例 数据 :

CREATE TABLE table_name (Column_A, Column_B) AS
  SELECT *
  FROM   (
    SELECT 'A', 26.8 FROM DUAL UNION ALL
    SELECT 'B', 23.5 FROM DUAL UNION ALL
    SELECT 'C', 22.5 FROM DUAL UNION ALL
    SELECT 'A', 21.9 FROM DUAL UNION ALL
    SELECT 'B', 23.1 FROM DUAL UNION ALL
    SELECT 'C', 29.1 FROM DUAL
  )
  ORDER BY DBMS_RANDOM.VALUE() -- Simulate non-deterministic order of result set.

中 的 每 一 个
然后 道 :

SELECT A, B, C
FROM   (
  SELECT t.*,
         ROW_NUMBER() OVER (PARTITION BY Column_A ORDER BY ROWNUM) AS rn
  FROM   table_name t
)
PIVOT (
  MAX(column_b) FOR column_a IN ('A' AS a, 'B' AS b, 'C' AS c)
)

格式
可能 ( 随机 ) 输出 :
| A 级|乙|C 语言|
| - -| - -| - -|
| 21.9 |二十三 点 五|二十九 点 一|
| 26.8 |二十三 点 一|二十二 点 五|
数据 点 最终 出现 在 哪 一 行 是 有 可能
然而 , 如果 数据 集中 有 某些 内容 决定 了 行 :

CREATE TABLE table_name (Column_A, Column_B, Column_C) AS
  SELECT *
  FROM   (
    SELECT 'A', 26.8, 1 FROM DUAL UNION ALL
    SELECT 'B', 23.5, 1 FROM DUAL UNION ALL
    SELECT 'C', 22.5, 1 FROM DUAL UNION ALL
    SELECT 'A', 21.9, 2 FROM DUAL UNION ALL
    SELECT 'B', 23.1, 2 FROM DUAL UNION ALL
    SELECT 'C', 29.1, 2 FROM DUAL
  )
  ORDER BY DBMS_RANDOM.VALUE() -- Simulate non-deterministic order of result set.

格式
然后 道 :

SELECT A, B, C
FROM   table_name
PIVOT (
  MAX(column_b) FOR column_a IN ('A' AS a, 'B' AS b, 'C' AS c)
)

格式
输出 :
| A 级|乙|C 语言|
| - -| - -| - -|
| 26.8 |二十三 点 五|二十二 点 五|
| 21.9 |二十三 点 一|二十九 点 一|
你 就会 得到 预期 的 答案 。
您 需要 这些 额外 的 数据 才 能 将 数据 点 关联 到 正确 的 行 中 。
fiddle 的 最 大 值

相关问题