哈哈哈123457
2019-03-12 10:30
采纳率: 100%
浏览 374

一个案例 sql语句不会写 来问问大神

有两个表,一个体检套餐表 taocan ,一个体检项目表 xiangmu , 项目表main_id关联套餐表 id,  一个体检套餐对应多个体检项目

现在要查询体检套餐的套餐名称和婚姻状况,套餐的婚姻状况是根据体检项目表来计算的,就是所有体检项目中有一个项目是已婚的那么这个套餐就是已婚的,如果都为未婚的 ,那么这个套餐就是未婚。 (项目表中婚否字段暂且为isM  0表示已婚 1表示未婚)

  • 写回答
  • 好问题 提建议
  • 关注问题
  • 收藏
  • 邀请回答

4条回答 默认 最新

  • xinfo1552 2019-03-12 11:05
    已采纳

    select taocan.name as '套餐名', case when xm.isM is null then '未婚' else '已婚' end as '婚姻状况'
    from taocan
    left join (
    select top 1 main_id,isM from
    xiangmu where xiangmu.main_id = taocan.id and xiangmu.isM=0
    ) xm on xm.main_id = taocan.id

    可以查到每个套餐的套餐名和婚姻状况。

    已采纳该答案
    评论
    解决 无用
    打赏 举报
  • 来临 2019-03-12 10:42

    select a.套餐名称,a.婚姻状况 from taocan a,xiangmu b where a.id=b.main_id and b.isM ='0'(已婚套餐)
    select a.套餐名称,a.婚姻状况 from taocan a,xiangmu b where a.id=b.main_id and b.isM ='1'(未婚套餐)

    评论
    解决 无用
    打赏 举报
  • Boover 2019-03-12 11:03
    select 
        taocan.id,
            min(xiangmu.isM) --- 如果有一个项目的婚姻状况是已婚,则为0;如果所有都是未婚,则是1
    from taocan
    left join xiangmu 
        on(taocan.id = xiangmu.id)
    group by 
        taocan.id
    
    评论
    解决 无用
    打赏 举报
  • /*空山*/ 2019-03-12 11:05
    select 套餐id,case when(MIN(isM)<1) then '已婚' else '未婚' end  from 体检项目表 group by 套餐id
    

    这是mssql的,oracle没用过

    评论
    解决 无用
    打赏 举报