如何使用Sql通过此语句排序?

问题描述

| 如何按小部件数量排序列表'widgets_spec?
select distinct
     m.p_c_id,(select distinct \'<li>\' +convert(varchar,widgets) + \'<br> \'
      from dbo.spec_master m2
          where m.p_c_id = m2.p_c_id and widgets is not null
          for xml path(\'\'),type).value(\'.[1]\',\'nvarchar(max)\'
     ) as widgets_spec
from dbo.spec_master m
inner join dbo.Productvaration pv on pv.p_c_id = m.p_c_id
inner join dbo.Varation v on v.varation_id = pv.varation_type_id
where v.varation_id  = 4
group by m.p_c_id
现在输出看起来像:
<li>10<br> <li>12<br> <li>15<br> <li>8<br>
当我希望它看起来像:
<li>8<br> <li>10<br> <li>12<br> <li>15<br> 
谢谢你的帮助。 编辑:我正在尝试排序内部选择语句,以连接值。     

解决方法

您不需要
Distinct
Group By
。您应该使用其中一个。在这种情况下,我相信您必须使用Group By才能起作用。
Select m.p_c_id,(
        Select \'<li>\' + Cast( m2.num_of_lights As varchar(10)) + \'<br /> \'
        From dbo.spec_master As m2
        Where m.p_c_id = m2.p_c_id 
            And m2.num_of_lights Is Not Null
        Group By m2.num_of_lights   
        Order By m2.num_of_lights
        For Xml Path(\'\'),type).value(\'.[1]\',\'nvarchar(max)\'
        ) As numLights_spec
From dbo.spec_master As m
    Inner Join dbo.ProductVaration As pv 
        On pv.p_c_id = m.p_c_id
    Inner Join dbo.Varation As v 
        On v.varation_id = pv.varation_type_id
Where v.varation_id  = 4
Group by m.p_c_id
    ,
  select distinct
     m.p_c_id,(select distinct \'<li>\' +convert(varchar,num_of_lights) + \'<br> \'
      from dbo.spec_master m2
          where m.p_c_id = m2.p_c_id and num_of_lights is not null
      ORDER BY convert(varchar,num_of_lights)
     ) as numLights_spec
  from dbo.spec_master m
  inner join dbo.ProductVaration pv on pv.p_c_id = m.p_c_id
  inner join dbo.Varation v on v.varation_id = pv.varation_type_id
  where v.varation_id  = 4
  group by m.p_c_id
) As SubA
    ,这里的其他一些答案将不起作用,因为按now-varchar num_of_lights进行排序会像现在一样将\'8 \'放在\ '15 \'之后。您想按数字顺序对numLights进行排序,而周围的那些html标签将不会发生这种情况。您可以将一个子选择添加到您的子选择中,以便对其进行排序,然后在其周围带有标签的情况下对其进行选择。示例(未经测试):
SELECT * FROM (
  select distinct
  m.p_c_id,num_of_lights) + \'<br> \'
  from (select distinct p_c_id,num_of_lights from dbo.spec_master order by num_of_lights) m2
      where m.p_c_id = m2.p_c_id and num_of_lights is not null
      for xml path(\'\'),\'nvarchar(max)\'
 ) as numLights_spec
from dbo.spec_master m
inner join dbo.ProductVaration pv on pv.p_c_id = m.p_c_id
inner join dbo.Varation v on v.varation_id = pv.varation_type_id
where v.varation_id  = 4
group by m.p_c_id
就个人而言,只要在获取查询结果的任何后端代码中添加html标签即可。