Mysql 自定义组表

Mysql 自定义组表,mysql,group-by,Mysql,Group By,我有一张这样的合同桌 我希望结果是这样的 我应该使用什么查询来检索结果(如示例所示)?我试图使用组查询,但它仍然不能执行我想要的操作。类似的操作将返回指定的结果。不清楚要在哪些列上“匹配”,我使用了前四列,因为它们在一起显示“分组”的行上是相同的 “诀窍”是使用GROUPBY获得要返回的行的不同列表。您可以使用外部联接来挑选单独的行,以匹配从内联视图返回的行(别名为g) 此查询假定合同列在每个“组”中是唯一的。也就是说,对于('ENG','SWD','ABCDf','2012-11-06')

我有一张这样的合同桌

我希望结果是这样的


我应该使用什么查询来检索结果(如示例所示)?我试图使用组查询,但它仍然不能执行我想要的操作。

类似的操作将返回指定的结果。不清楚要在哪些列上“匹配”,我使用了前四列,因为它们在一起显示“分组”的行上是相同的

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

此查询假定
合同
列在每个“组”中是唯一的。也就是说,对于
('ENG','SWD','ABCDf','2012-11-06')
,将不会有两行,例如,带有
Contract='I'
。(在样本数据中,它是唯一的,但我们无法保证它是唯一的。)


Thx@spencer7593就像一个符咒
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'