解决方案 »

  1.   

    不太清楚 变量@客户的意思
    @行业倒是可以,因为涉及到的是列名,要么写死要么动态执行,以下写死
    SELECT 员工名,熟悉客户1,熟悉客户2,熟悉客户3,工作年数,电子行业工作年数,机械行业工作年数,纺织行业工作年数
    FROM(
    SELECT 员工名,熟悉客户1,熟悉客户2,熟悉客户3,工作年数,电子行业工作年数,机械行业工作年数,纺织行业工作年数
    ,COUNT(员工名)OVER(PARTITION BY 熟悉客户1)C1
    ,COUNT(员工名)OVER(PARTITION BY 熟悉客户2)C2
    ,COUNT(员工名)OVER(PARTITION BY 熟悉客户3)C3
    FROM TB
    )T
    ORDER BY CASE WHEN C1>1 THEN 0 WHEN C2>1 THEN 1 WHEN C3>1 THEN 2 ELSE 3 END
    ,CASE WHEN C1>1 THEN C1 WHEN C2>1 THEN C2 WHEN C3>1 THEN C3 ELSE 0 END DESC
    ,CASE WHEN C1>1 THEN 熟悉客户1 WHEN C2>1 THEN 熟悉客户2 WHEN C3>1 THEN 熟悉客户3 ELSE '' END
    ,CASE @行业 WHEN '电子' THEN 电子行业工作年数
    WHEN '机械' THEN 机械行业工作年数
    WHEN '纺织' THEN 纺织行业工作年数 END DESC
    ,电子行业工作年数 DESC,工作年数 DESC
      

  2.   

    DECLARE @行业 VARCHAR(100),@客户 VARCHAR(100)
    SET @行业='电子'
    SET @客户='客户2'
    SELECT 员工名,熟悉客户1,熟悉客户2,熟悉客户3,工作年数,电子行业工作年数,机械行业工作年数,纺织行业工作年数
    FROM(
    SELECT 员工名,熟悉客户1,熟悉客户2,熟悉客户3,工作年数,电子行业工作年数,机械行业工作年数,纺织行业工作年数
    ,COUNT(员工名)OVER(PARTITION BY 熟悉客户1)C1
    ,COUNT(员工名)OVER(PARTITION BY 熟悉客户2)C2
    ,COUNT(员工名)OVER(PARTITION BY 熟悉客户3)C3
    FROM TB
    )T
    ORDER BY CASE WHEN 熟悉客户1=@客户 THEN 0 ELSE 1 END
    ,CASE WHEN 熟悉客户2=@客户 THEN 0 ELSE 1 END
    ,CASE WHEN 熟悉客户3=@客户 THEN 0 ELSE 1 END
    ,CASE @行业 WHEN '电子' THEN 电子行业工作年数
    WHEN '机械' THEN 机械行业工作年数
    WHEN '纺织' THEN 纺织行业工作年数 END DESC
    ,电子行业工作年数 DESC,工作年数 DESC
      

  3.   

    SELECT 员工名,熟悉客户1,熟悉客户2,熟悉客户3,工作年数,电子行业工作年数,机械行业工作年数,纺织行业工作年数
    FROM TB
    ORDER BY CASE WHEN 熟悉客户1=@客户 THEN 0 ELSE 1 END
    ,CASE WHEN 熟悉客户2=@客户 THEN 0 ELSE 1 END
    ,CASE WHEN 熟悉客户3=@客户 THEN 0 ELSE 1 END
    ,CASE @行业 WHEN '电子' THEN 电子行业工作年数
    WHEN '机械' THEN 机械行业工作年数
    WHEN '纺织' THEN 纺织行业工作年数 END DESC
    ,电子行业工作年数 DESC,工作年数 DESC更正一下