我有一个这样的合同表
我希望结果看起来像这样
像示例一样,我应该使用什么查询来检索结果?我正在尝试使用组查询,但是它仍然不能满足我的要求。
最佳答案
这样的事情将返回指定的结果。目前尚不清楚您要“匹配”哪些列,我使用了前四列,因为这些列在您显示为“分组”在一起的行上是相同的。
“技巧”是使用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/