SQL Server 2005 запросить конкретные результаты группировки и упорядочить по - PullRequest
0 голосов
/ 19 октября 2011

Я использую SQL Server 2005.

Пожалуйста, рассмотрите следующий запрос:

DECLARE @SearchTerm NVARCHAR(4)
SELECT @SearchTerm = 'X'

SELECT ProductCode -- NVARCHAR type
FROM Product
WHERE ProductCode LIKE '%' + @SearchTerm + '%'

Как мне указать правильную группировку / порядок по предложению для моего запроса, чтобы упорядочить результаты по следующим конкретным критериям?

  1. Во-первых, порядок по ProductCode возрастает, где ProductCode НАЧИНАЕТСЯ с @ SearchTerm
  2. Затем упорядочите оставшиеся результаты по возрастанию кода продукта.

Так, например, результаты могут выглядеть так:

ProductCode
-----------
XAA
XMA
XZA
AXA
AXZ
BAX
BMX
BXZ
etc.

Будем благодарны за любые ответы.

Ответы [ 3 ]

2 голосов
/ 19 октября 2011

Следующее должно делать то, что вы хотите.Сначала мы заказываем ASC ProductCode, если он начинается с поискового термина (примечание: ваше предложение where оценивается, если ProductCode содержит где-либо в нем @SearchTerm, а не только начинается с).Затем мы заказываем по ProductCode.Если поиск ProductCode не начинается с @SearchTerm, тогда мы просто упорядочиваем по ProductCode (потому что все первые упорядоченные значения будут нулевыми).

DECLARE @SearchTerm NVARCHAR(4)
SELECT @SearchTerm = 'X'

SELECT ProductCode 
FROM Product
WHERE ProductCode LIKE '%' + @SearchTerm + '%'
ORDER BY 
CASE WHEN ProductCode LIKE @SearchTerm + '%' THEN 0 ELSE 1 END
,CASE WHEN ProductCode LIKE @SearchTerm + '%' THEN ProductCode ELSE NULL END ASC
, ProductCode ASC 
0 голосов
/ 19 октября 2011

Спасибо всем за ответы, однако я сам придумал свое предпочтительное решение, основываясь на том, что синтаксис других ответов использовался LIKE @SearchTerm + '%', то есть отбрасывание первого '%' дало мне подсказку, которая напомнила мне старый трюк Excel :

SELECT ProductCode
FROM Product
WHERE ProductCode LIKE '%' + @SearchTerm + '%'
ORDER BY CASE WHEN LEFT(ProductCode, LEN(@SearchTerm)) = @SearchTerm THEN 0 ELSE 1 END ASC, ProductCode ASC
0 голосов
/ 19 октября 2011

Как вариант, решение UNION может быть применено здесь:

SELECT ProductCode
FROM Product
WHERE ProductCode LIKE @SearchTerm + '%'
union
SELECT ProductCode
FROM Product
WHERE ProductCode LIKE '%' + @SearchTerm + '%'
and ProductCode NOT LIKE @SearchTerm + '%'

, после чего мы можем заключить этот запрос и сгруппировать его с внешним запросом

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...