代码之家  ›  专栏  ›  技术社区  ›  nasic

SQL order by找不到解决方案

  •  0
  • nasic  · 技术社区  · 6 年前

    我很难在这里查询订单。 想象一下当前查询的以下结果。

    表A。Id——表B。标记名----表B。标记值
    1-------------------A--------------------客户A
    1--------------B--------------B合同
    1-------------------C-------------------Z产品
    2--------------A---------------客户B
    2--------------B--------------C合同
    2-------------------C--------------------产品Y
    3--------------A----------------------------------C客户
    3--------------B--------------D合同
    3-------------------C--------------------产品X

    因此,排序是动态的,可以是A、B、C asc或desc(TableB.TagName) 如果用户选择C ASC作为排序,结果应为:

    表A。Id——表B。标记名----表B。标记值
    3--------------A----------------------------------C客户
    3--------------B--------------D合同
    3--------------C--------------------------- 产品X
    2--------------A---------------客户B
    2--------------B--------------C合同
    2--------------C--------------------------- 产品Y
    1-------------------A--------------------客户A
    1--------------B--------------B合同
    1--------------C--------------------------- 产品Z

    非常感谢你的帮助

    1 回复  |  直到 6 年前
        1
  •  0
  •   Gordon Linoff    6 年前

    哦,我明白了。

    可以在中使用子查询 order by :

    select a.id, b.tagname, b.tagvalue,
           max(case when b.tagname = @usertagname then b.tagvalue end) over (partition by a.id) as tagtagvalue
    from tablea a join
         tableb b
         on a.tagid = b.tagid
    order by tagtagvalue, a.id, b.tagname;
    

    要获得降序排序,需要 case “order by”中的表达式。