【问题标题】:In Oracle SQL, How to replicate rows based on the binary value in a column?在 Oracle SQL 中,如何根据列中的二进制值复制行?
【发布时间】:2015-12-05 00:06:50
【问题描述】:

问题:

+------+--------+
| NAME | BINARY |
+------+--------+
| A    |   1101 |
| B    |   0011 |
+------+--------+

我有带有 NAME 和 BINARY 值的表。 我必须通过考虑它们各自的 BINARY 值来复制行,包括 ID 列。

在给定的示例中,名称 A 的 BINARY 值为 1101,这意味着它应该有 3 行,其 ID 分别为 A-01、A-02、A-04,并且不应为 A-03 添加任何行因为它在二进制值中为 0 (11’0’1)。 如何在 Oracle SQL 查询中执行此操作?我用的是 11g。

预期输出:

+------+--------+------+
| NAME | BINARY |  ID  |
+------+--------+------+
| A    |   1101 | A-01 |
| A    |   1101 | A-02 |
| A    |   1101 | A-04 |
| B    |   0011 | B-03 |
| B    |   0011 | B-04 |
+------+--------+------+

【问题讨论】:

    标签: sql oracle


    【解决方案1】:

    您可以使用来自dual 的查询和connect by level 子句生成从1 到4 的一系列数字,然后(反)将其加入表格并检查该位置的字符是否在@987654324 @ 是 01

    SELECT name, bin, name || '-0' || lev AS id
    FROM   mytable
    JOIN   (SELECT     LEVEL AS lev
            FROM       dual
            CONNECT BY LEVEL <= 4) ON SUBSTR(bin, lev, 1) != '0'
    

    此查询的假设:

    1. 我将列称为bin 而不是binary,因为这是一个保留字。如果需要,您可以使用 binary 并用引号将其括起来。
    2. 我假设bin 列是varchar。如果不是,只需使用to_char 将其转换为查询中的字符串

    SQLFiddle

    【讨论】:

      猜你喜欢
      • 2022-01-12
      • 1970-01-01
      • 2022-01-10
      • 2021-08-26
      • 1970-01-01
      • 2021-12-07
      • 2015-12-14
      • 2019-09-19
      • 2011-12-29
      相关资源
      最近更新 更多