【问题标题】:Oracle SQL How can I separate values from a column in two different columns?Oracle SQL 如何从两个不同列中的列中分离值?
【发布时间】:2017-05-26 18:25:53
【问题描述】:

我想编写一个查询来返回一些概念的描述及其各自的价格,但我想创建两个不同的列来对两个不同的项目类别的值进行分类。有可能吗?

SELECT b.descripcion CONCEPTO, a.cantidad, a.importe,
       c.descripcion
FROM   detalles_liquidaciones a
JOIN   conceptos b
ON    (a.codigo_concepto = b.codigo)
JOIN   tipos_conceptos c
ON    (b.codigo_tipo = c.codigo)
WHERE  a.numero_liquidacion = 13802
AND    c.descripcion IN ('HABER', 'RETENCION', 'ANTICIPO');

Output Query

我想编写如下代码: Ideal query

【问题讨论】:

  • 请显示示例表数据(无图像链接)并在问题中输出示例(无链接)。
  • 我粘贴了一个屏幕截图,但我不知道为什么问题上没有显示。

标签: sql oracle join inline-view


【解决方案1】:

这行得通吗? (也许有更好的解决方案,感觉有点棘手……字面意思是“切换”):

SELECT Concepto ,
      (CASE
         WHEN description LIKE 'HABER' THEN
          importe
         ELSE
          NULL
       END) haberes,
       (CASE
         WHEN description LIKE 'HABER' THEN
          cantidad
         ELSE
          NULL
       END) cantidad,
       (CASE
         WHEN description LIKE 'RETENCION' OR description LIKE 'ANTICIPO' THEN
          importe
         ELSE
          NULL
       END) retenciones
  FROM (SELECT b.descripcion concepto, a.cantidad, a.importe, c.descripcion
          FROM detalles_liquidaciones a
          JOIN conceptos b
            ON (a.codigo_concepto = b.codigo)
          JOIN tipos_conceptos c
            ON (b.codigo_tipo = c.codigo)
         WHERE a.numero_liquidacion = 13802
           AND c.descripcion IN ('HABER', 'RETENCION', 'ANTICIPO'));

【讨论】:

  • 拉斐尔你是个天才!!!你能解释一下你是如何使用 CASE 语句在两个不同的列中检索信息的吗?我不知道这种技术。
  • 它基本上是在“创建”带有条件的新列显示,连接已经创建,你只是重新排列你已经有条件的行。如您所见,其中两行具有相同的输出,但其中之一是“WHEN description LIKE 'HABER'”,另一行是“description LIKE 'RETENCION' OR description LIKE 'ANTICIPO'”,这是两个不同的列
  • 谢谢拉斐尔。非常感谢您的帮助!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-08-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-01-15
相关资源
最近更新 更多