trychole 2022-04-09 22:58 采纳率: 100%
浏览 42
已结题

MYSQL查询主从表时,主表的数量字段怎么只显示一次,明细表可以有多行

主表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 
    )))

img

  • 写回答

3条回答 默认 最新

  • DarkAthena ORACLE应用及数据库设计方案咨询师 2022-04-09 23:14
    关注

    咨询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的第一行

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录
查看更多回答(2条)

报告相同问题?

问题事件

  • 系统已结题 4月19日
  • 已采纳回答 4月11日
  • 修改了问题 4月9日
  • 修改了问题 4月9日
  • 展开全部

悬赏问题

  • ¥15 随身WiFi网络灯亮但是没有网络,如何解决?
  • ¥15 gdf格式的脑电数据如何处理matlab
  • ¥20 重新写的代码替换了之后运行hbuliderx就这样了
  • ¥100 监控抖音用户作品更新可以微信公众号提醒
  • ¥15 UE5 如何可以不渲染HDRIBackdrop背景
  • ¥70 2048小游戏毕设项目
  • ¥20 mysql架构,按照姓名分表
  • ¥15 MATLAB实现区间[a,b]上的Gauss-Legendre积分
  • ¥15 delphi webbrowser组件网页下拉菜单自动选择问题
  • ¥15 linux驱动,linux应用,多线程