我有一个这样的合同表



我希望结果看起来像这样



像示例一样,我应该使用什么查询来检索结果?我正在尝试使用组查询,但是它仍然不能满足我的要求。

最佳答案

这样的事情将返回指定的结果。目前尚不清楚您要“匹配”哪些列,我使用了前四列,因为这些列在您显示为“分组”在一起的行上是相同的。

“技巧”是使用GROUP BY获得要返回的不同行的列表。您可以使用外部联接来挑选单个行,以匹配从内联视图返回的行(别名为g)。

该查询假定Contract列在每个“组”中都是唯一的。也就是说,不会有两行,例如,Contract='I'表示('ENG','SWD','ABCDf','2012-11-06')。 (在示例数据中,它是唯一的,但是我们没有得到任何保证。)

SELECT g.departemen
     , g.section
     , g.name
     , g.start
     , i.`end contract` AS `End Contract I`
     , p.`end contract` AS `End Contract P`
     , q.`end contract` AS `End Contract II`
  FROM ( SELECT t.departemen
              , t.section
              , t.name
              , t.start
           FROM mytable t
          GROUP
             BY t.departemen
              , t.section
              , t.name
              , t.start
       ) g

  LEFT
  JOIN mytable i
    ON i.departemen = g.departemen
   AND i.section    = g.section
   AND i.name       = g.name
   AND i.start      = g.start
   AND i.contract   = 'I'

  LEFT
  JOIN mytable p
    ON p.departemen = g.departemen
   AND p.section    = g.section
   AND p.name       = g.name
   AND p.start      = g.start
   AND p.contract   = 'P'

  LEFT
  JOIN mytable q
    ON q.departemen = g.departemen
   AND q.section    = g.section
   AND q.name       = g.name
   AND q.start      = g.start
   AND q.contract   = 'II'

关于mysql - 自定义组表,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/22826500/

10-10 06:37