在Oracle SQL中,如何根据列中的二进制值复制行?

单57

问题:

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

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

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

预期产量:

+------+--------+------+
| NAME | BINARY |  ID  |
+------+--------+------+
| A    |   1101 | A-01 |
| A    |   1101 | A-02 |
| A    |   1101 | A-04 |
| B    |   0011 | B-03 |
| B    |   0011 | B-04 |
+------+--------+------+
穆雷尼克

您可以使用dual带有connect by level子句的from查询来生成一系列从1到4的数字,然后在表上对其进行(反)联接,并检查该位置中的字符binary是a0还是a 1

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

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章