一个关于case语句的问题

问题详细描述:

有一表personalid:
personalid planid checkdate name brithdate
40001 101 2001 nick 1981
40001 151 2002 nick 1981
40002 101 2000 ying 1980
40002 151 2001 ying 1980
我用
SELECT personalid,
MIN(CASE WHEN planid = '101' THEN checkdate END) f101,
MIN(CASE WHEN planid = '151' THEN checkdate END) f151
FROM EPIVPerson
GROUP BY personalid;

是可以的,结果:

personalid f101 f151
40001 2001 2002
40002 2000 2001

但我想结果是这样:

personalid name brithdate f101 f151
40001 nick 1981 2001 2002
40002 ying 1980 2000 2001

用语句:

SELECT personalid, name,brithdate,
MIN(CASE WHEN planid = '101' THEN checkdate END) f101,
MIN(CASE WHEN planid = '151' THEN checkdate END) f151
FROM EPIVPerson
GROUP BY personalid;
就出错了,为何? 语句应如何写?

回答:

---------------------------------------------------------------

SELECT personalid, min(name) as name,min(brithdate) as brithdate,
MIN(CASE WHEN planid = '101' THEN checkdate END) f101,
MIN(CASE WHEN planid = '151' THEN checkdate END) f151
FROM EPIVPerson
GROUP BY personalid;

---------------------------------------------------------------

Published At
Categories with 数据库类
Tagged with
comments powered by Disqus