主表formtable_main_643,明细表formtable_main_643_dt1,做了个视图如下;当查询出的结果 明细表有多行时,主表字段nzprs-拟招聘人数 只显示一次,其他为空或0
SELECT
`m`.`tall` AS `tall`,
`a`.`requestid` AS `requestid`,
`a`.`zpxqsz` AS `zpxqsz`,
`a`.`sqbm` AS `sqbm`,
`a`.`nzpgwmc` AS `nzpgwmc`,
`a`.`nzprs` AS `nzprs`,
`a`.`gwzj` AS `gwzj`,
`a`.`sfbzn` AS `sfbzn`,
`a`.`zpyy` AS `zpyy`,
`a`.`zpyybcsm` AS `zpyybcsm`,
`a`.`gwlx` AS `gwlx`,
`a`.`qwdgsj` AS `qwdgsj`,
`a`.`zpssry` AS `zpssry`,
`b`.`lyryxm` AS `lyryxm`,
`b`.`lygw` AS `lygw`,
`b`.`lygwzj` AS `lygwzj`,
`b`.`offersj` AS `offersj`,
`b`.`sjrzsj` AS `sjrzsj`,
`b`.`zpqd` AS `zpqd`,
`b`.`jtqdmc` AS `jtqdmc`,
`b`.`ntry` AS `ntry`,
`b`.`ntrygh` AS `ntrygh`,
`b`.`gwzpwcqk` AS `gwzpwcqk`,
`a`.`xqs` AS `xqs`,
`a`.`wcs` AS `wcs`,
`a`.`wcl` AS `wcl`,
`a`.`sqsj` AS `sqsj`,
`a`.`mxwczs` AS `mxwczs`,
`b`.`zpwcjs` AS `zpwcjs`,
`b`.`bz` AS `bz`,(
CASE
`c`.`CURRENTNODETYPE`
WHEN '0' THEN
'创建'
WHEN '3' THEN
'归档' ELSE '运行中'
END
) AS `流程状态`
FROM
(((
`formtable_main_643` `a`
LEFT JOIN `formtable_main_643_dt1` `b` ON ((
`a`.`id` = `b`.`mainid`
)))
LEFT JOIN `workflow_requestbase` `c` ON ((
`a`.`requestid` = `c`.`REQUESTID`
)))
LEFT JOIN (
SELECT
`n`.`requestid` AS `requestid`,
sum( `n`.`tall` ) AS `tall`
FROM
( SELECT `view_zpxqbbtest`.`nzprs` AS `tall`, `view_zpxqbbtest`.`requestid` AS `requestid` FROM `view_zpxqbbtest` GROUP BY `view_zpxqbbtest`.`requestid` ) `n`
) `m` ON ((
1 = 1
)))
咨询sql题,请说明数据库类型、版本,提供对应的原始数据建表sql及insert数据sql,以及用表格形式说明一下最终需要的数据的格式。
虽然能大概猜到你是什么意思,但不同数据库的写法不一样,而且你说的那种数据,更适合在客户界面进行处理,不适合查询出来直接就是这个结果,因为存在大量的空值,一排序就乱了,找不到明细行对应主表的哪一行。
下面是使用开窗函数lag的一种实现方式,让主表的数据只会在明细的第一行显示,其他行都为空
select
case when lag(主表.id) over(order by 主表.id) =主表.id then null else 主表.id end,
case when lag(主表.id) over(order by 主表.id) =主表.id then null else 主表.字段2 end,
case when lag(主表.id) over(order by 主表.id) =主表.id then null else 主表.字段3 end,
明细表.字段4
from 主表,明细表 where 主表.id=明细表.主表id
如果是支持开窗函数的数据库,那么可以把
`a`.`nzprs` AS `nzprs`,
改成
case when lag(`a`.`id`) over(order by `a`.`id`, `b`.`id`)=`a`.`id` then null else `a`.`nzprs` end AS `nzprs`,
然后sql的最后还要加上order by a
.id
, b
.id
,否则无法定位到每个主表id的第一行
你是用什么技术实现数据库呢,如果mybatis可以配置一对多。
您好,我是有问必答小助手,您的问题已经有小伙伴帮您解答,感谢您对有问必答的支持与关注!