Как я могу использовать Sql для заказа по этому заявлению? - PullRequest
1 голос
/ 25 мая 2011

Как мне упорядочить список '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> 

Спасибо за вашу помощь.

РЕДАКТИРОВАТЬ: я пытаюсь упорядочить внутренний оператор выбора, который объединяет значения.

Ответы [ 3 ]

2 голосов
/ 25 мая 2011

Вам не нужны и 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
0 голосов
/ 25 мая 2011

Некоторые другие ответы здесь не сработают, так как при упорядочении с помощью now-varchar num_of_lights будет поставлено «8» после «15», как это происходит сейчас.Вы хотите заказать numLights численно, чего не случится с этими HTML-тегами вокруг них.Вы можете добавить вложенный выбор в свой выбор, чтобы упорядочить их, а затем выбрать их с тегами вокруг них.Пример (не тестировался):

SELECT * FROM (
  select distinct
  m.p_c_id
 ,(select distinct '<li>' +convert(varchar,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(''), type).value('.[1]', '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-теги в любой внутренний код, который получает результат запроса.

0 голосов
/ 25 мая 2011
  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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...