问题描述
|
如何按小部件数量排序列表'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标签即可。