-1

我对动态 sql 非常陌生,并且继承了一个我似乎无法弄清楚的项目。

排序在这个项目中从未正常工作,我试图在保持 sql 和存储过程动态的同时弄清楚它。

下面的这一行基本上就是问题所在。如果变量 inSortOrder 是 'first_name,则 sql 应首先按 first_name 排序,然后按姓氏排序。

问题是,我需要根据传递的另一个变量按 ASC 或 DESC 排序。

我不知道A做了什么,也无法在互联网上找到有关它的信息。我尝试添加另一个“DESC”或“ASC”,但它总是被忽略。

无论如何,它总是会返回上升。有谁知道如何解决这个问题,并且仍然按多个字段排序?A是做什么的?

if(inSortOrder='first_name',concat(A.first_name,'_A_',A.last_name),''),

编辑: 整个存储过程超过 100 行,但这里是有问题的查询。我知道它的其余部分有效。只是排序有问题。具体来说,试图弄清楚“ A ”的作用。(下划线之间的a)

假设变量 inOrder 作为“first_name”放入存储过程。基本上试图弄清楚如何根据另一个变量编辑最后一行,按 DESC 或 ASC 排序。

选择 A.first_name,

N.middle_name

    N.last_name
  FROM
      student S left JOIN
      names N on S.id = N.student_id
  WHERE
    N.record_status = 'FAILED'

ORDER BY if(inOrder='first_name',concat(N.first_name,' A ',N.last_name),''),

4

1 回答 1

0

我已经弄清楚了问题所在。像往常一样,当我不熟悉代码时,我只需要花更多时间查看代码。动态 sql 的新手,但我喜欢我目前所看到的。

就像这样变量是 inSortOrder = 'last_name' inSortType = 'DESC'

    if(inOrder='last_name' and inType<>'DESC',concat(N.last_name,'_A_',N.first_name,'_A_',N.middle_name),''),
    if(inOrder='last_name' and inType='DESC',concat(N.last_name,'_A_',N.first_name,'_A_',N.middle_name),'') DESC,
于 2013-03-20T20:18:30.627 回答