我有这样的合同表
我希望结果看起来像这样
我应该使用什么查询来检索结果,例如示例?我试图使用组查询,但它仍然没有做我想要的。
答案 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'