代码之家  ›  专栏  ›  技术社区  ›  Stefano Maviega

SQL-如何在一行中显示两行中具有不同值的相同字段

  •  0
  • Stefano Maviega  · 技术社区  · 7 年前

    我有一个带有特定“where”子句的select,其中有两行,但我需要在一行中显示这两个值,但具有不同的“名称”

    select 
    case when t_docn <> 0 then t_docd end as doc_date,
    case when t_docn = 0 then t_docd end as pay_date
    from
    ttfacr200606
    
    where
    t_ninv = '40000122'
    and
    t_ccur = 'BRL'
    

    有了这个代码,我得到了

    doc_date    pay_date
    NULL    2015-08-21 00:00:00.000
    2015-09-18 00:00:00.000 NULL
    

    我需要

    doc_date    pay_date
    2015-09-18 00:00:00.000 2015-08-21 00:00:00.000
    

    谢谢大家!

    1 回复  |  直到 7 年前
        1
  •  1
  •   Jorge Campos    7 年前

    您可以使用聚合函数来实现这一点,尽管您需要验证它是否适用于所有情况。它将是这样的:

    select 
           t_ninv, 
           max(case when t_docn <> 0 then t_docd else null end) as doc_date,
           max(case when t_docn = 0 then t_docd else null end) as pay_date
      from ttfacr200606
     where t_ccur = 'BRL'
       and t_ninv = '40000122'
     group by t_ninv;
    

    请注意,我在评论中使用了一列作为公共点,因为如果你不使用它并且有很多行,查询结果可能是不可预测的。