自定义组表

时间:2014-04-03 02:03:27

标签: mysql group-by

我有这样的合同表

Table

我希望结果看起来像这样

Result

我应该使用什么查询来检索结果,例如示例?我试图使用组查询,但它仍然没有做我想要的。

1 个答案:

答案 0 :(得分:0)

这样的东西会返回指定的结果。目前还不清楚你想要“匹配”哪些列,我使用了前四列,因为这些列在你显示“分组”在一起的行上是相同的。

“技巧”是使用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'