根据题目要求,可以使用以下SQL语句满足条件:

SELECT Id, WorkId, Name, ContractNo, ContractType, ContractTime, IsSyq, SyqSDate,
       SyqEDatte, ContractSDate, ContractEDate, DataStatus, IsDeleted, CUser,
       CDate, LUser, LDate, SyqMonth, ZZDate, CompanyCode, ContDesc, COptType,
       SignCompanyCode, TermMode, ContractTimeMonth, Remark, Mark
FROM hrbase_mark_contract
WHERE WorkId = #{work_id}
ORDER BY CASE
    WHEN (SELECT COUNT(DISTINCT CompanyCode) FROM hrbase_mark_contract WHERE WorkId = #{work_id}) = 1
        THEN Id
    WHEN #{company_code} IN (SELECT DISTINCT CompanyCode FROM hrbase_mark_contract WHERE WorkId = #{work_id})
        THEN CASE
            WHEN EXISTS (SELECT 1 FROM hrbase_mark_contract WHERE WorkId = #{work_id} AND CompanyCode <> #{company_code})
                THEN (
                    SELECT MIN(Id)
                    FROM (
                        SELECT Id
                        FROM hrbase_mark_contract
                        WHERE WorkId = #{work_id} AND CompanyCode = #{company_code}
                        UNION
                        SELECT Id
                        FROM hrbase_mark_contract
                        WHERE WorkId = #{work_id} AND CompanyCode <> #{company_code}
                    ) AS subquery
                    WHERE Id > (
                        SELECT MAX(Id)
                        FROM hrbase_mark_contract
                        WHERE WorkId = #{work_id} AND CompanyCode = #{company_code}
                    )
                )
            ELSE (
                SELECT MIN(Id)
                FROM hrbase_mark_contract
                WHERE WorkId = #{work_id} AND CompanyCode = #{company_code}
            )
        END
    ELSE Id
END ASC

这段SQL语句的逻辑如下:

  1. 首先根据工号(work_id)筛选出所有符合条件的合同数据;
  2. 接着根据不同的查询情况使用ORDER BY CASE进行排序:
    • 如果只查出一条数据,则直接按照id升序排列;
    • 如果查询出多条数据且所有数据的company_code相同,则按照id升序排列;
    • 如果查询出多条数据且company_code不完全相同,则首先判断传入的company_code是否在查询结果中,并且存在其他不同的company_code
      • 如果存在,则在查询结果中筛选出company_code相同的数据,并取其中id最小的一条数据;
      • 如果不存在,则按照id升序排列。

请根据实际情况将#{work_id}#{company_code}替换为实际的参数占位符。


原文地址: https://www.cveoy.top/t/topic/CoU 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录