【问题标题】:MySQL Union: Result Columns Side-by-SideMySQL Union:并排的结果列
【发布时间】:2012-12-05 22:31:28
【问题描述】:

我有 2 个由 UNION 组合的 SELECT 语句。我不想将所有结果按从一行到下一行的顺序堆叠,而是将第二个 SELECT 语句的结果/列添加到第一个 SELECT 语句的结果/列的旁边:

以下是两个查询,但简单的反馈可能就足够了。

查询 1

  select    
      LEFT(A.F_ANOTRIMESTRE, 4) Year_Max,

      RIGHT(A.F_ANOTRIMESTRE, 2) Quarter_Max,

      IF(RIGHT(A.F_ANOTRIMESTRE, 2)=03,'Enero a Marzo',
      IF(RIGHT(A.F_ANOTRIMESTRE, 2)=06,'Abril a Junio',
      IF(RIGHT(A.F_ANOTRIMESTRE, 2)=09,'Julio a Septiembre',
      IF(RIGHT(A.F_ANOTRIMESTRE, 2)=12,'Octubre a Diciembre',
      '')
      ))) Quarter_Name,

      ROUND(A.POR_RENTABILIDAD, 2) Quarterly_yield_Max

from      dr_rent_carteras_trimestres A
where     A.ID_CARTERA = @ID_CARTERA
And       A.IND_RENTABILIDAD = 1
And       LEFT(A.F_ANOTRIMESTRE, 4) = ( select    MAX(left(F_ANOTRIMESTRE, 4)) - 0
                              from      dr_rent_carteras_trimestres
                              where     ID_CARTERA = @ID_CARTERA )

查询 2

select    
      LEFT(A.F_ANOTRIMESTRE, 4) Year_Max_Less_One,

      RIGHT(A.F_ANOTRIMESTRE, 2) Quarter_Max_Less_One,

      IF(RIGHT(A.F_ANOTRIMESTRE, 2)=03,'Enero a Marzo',
      IF(RIGHT(A.F_ANOTRIMESTRE, 2)=06,'Abril a Junio',
      IF(RIGHT(A.F_ANOTRIMESTRE, 2)=09,'Julio a Septiembre',
      IF(RIGHT(A.F_ANOTRIMESTRE, 2)=12,'Octubre a Diciembre',
      '')
      ))) Quarter_Name,

      ROUND(A.POR_RENTABILIDAD, 2) Quarterly_yield_Max_Less_One

from      dr_rent_carteras_trimestres A
where     A.ID_CARTERA = @ID_CARTERA
And       A.IND_RENTABILIDAD = 1
And       LEFT(A.F_ANOTRIMESTRE, 4) = ( select    MAX(left(F_ANOTRIMESTRE, 4)) - 1
                              from      dr_rent_carteras_trimestres
                              where     ID_CARTERA = @ID_CARTERA )

【问题讨论】:

标签: mysql sql union


【解决方案1】:

您可以将结果放在临时表中,添加序列列,然后按 id 列左/右连接表。

对此没有纯 sql 方式。在 mysql 中你也可以这样做:

select tab1.a,tab1.b,tab1.c,tab2.a,tab2.b,tab2.c from 
 (SELECT @rowno:=@rowno+1 as id,a,b,c from tab1 where something) as tab1 left join
 (SELECT @rowno:=@rowno+1 as id,a,b,c from tab2 where something) as tab2 on tab2.id=tab1.id

但前提是您知道 tab1 有更多行。当然你可以先计算,但这将是一个复杂的查询。

我不确定是否加入您的查询,可能基于年份?你知道得更好。

【讨论】:

  • 不幸的是,我的 SQL 技能水平是新手到中级,我不熟悉你的语法 :( ... @rowno ... as id,a,b,c
  • 那只是用 1、2、3 等创建 id 列,因为您想在年+季度加入,所以可能不需要,对吧?
猜你喜欢
  • 2013-02-18
  • 2013-10-07
  • 1970-01-01
  • 1970-01-01
  • 2016-03-10
  • 2022-01-23
  • 2011-12-28
  • 1970-01-01
  • 2012-01-28
相关资源
最近更新 更多