2013-09-04 3 views
0

У меня есть поле поиска, где поиск пользователя в этом случае «RG Transport». Сначала я хочу получить самые точные соответствия.Как я могу получить первую строчку, которая будет самой первой?

Это генерируется запрос:

SELECT DISTINCT department.bold_id, 
       departmentid + ' ' + organization.name + ' - ' 
       + department.name AS DisplayValue, 
       organization.name 
FROM organization, 
     department 
WHERE organization.bold_id = department.organization 
     AND Upper(searchkeysname) LIKE '%[[]%RG%]%' 
     AND Upper(searchkeysname) LIKE '%[[]%TRANSPORT%]%' 
ORDER BY organization.name 

«RG Transport AB» на строке 78. Поэтому я хочу, чтобы это было в первой строке. я тогда попробуйте союза

SELECT DISTINCT department.bold_id, departmentid + ' ' + organization.name + ' - ' + department.name AS DisplayValue, 
organization.name FROM Department, Organization 
WHERE organization.bold_id = department.organization 
AND Upper(searchkeysname) LIKE '%[[]RG TRANSPORT%]%' 
UNION ALL 
SELECT DISTINCT department.bold_id, 
       departmentid + ' ' + organization.name + ' - ' 
       + department.name AS DisplayValue, 
       organization.name 
FROM organization, 
     department 
WHERE organization.bold_id = department.organization 
     AND Upper(searchkeysname) LIKE '%[[]%RG%]%' 
     AND Upper(searchkeysname) LIKE '%[[]%TRANSPORT%]%' 

Он работает нормально, но следующие строки не сортируются по имени. Если добавить

ORDER BY organization.name

до последнего запроса первая строка теряется. Есть ли другой способ, который я могу сделать?

ответ

0

просто добавить столбец с 1 в верхней половине союза и колонки 2 в нижней половине

ваш заказ тогда становится

order by newcolumn, organization.name 

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

поэтому, возможно, что-то вдоль этих линий может быть более релевантными

SELECT weakMatch.bold_id, 
    weakMatch.displayvalue, 
    weakMatch.name 
FROM (SELECT DISTINCT department.bold_id, 
        departmentid + ' ' + organization.name + ' - ' 
        + department.name AS DisplayValue, 
        organization.name 
    FROM department, 
      organization 
    WHERE organization.bold_id = department.organization 
      AND Upper(searchkeysname) LIKE '%[[]RG TRANSPORT%]%') AS 
    directMatch 
    LEFT OUTER JOIN (SELECT DISTINCT department.bold_id, 
            departmentid + ' ' + organization.name + 
            ' - ' 
            + department.name AS DisplayValue, 
            organization.name 
        FROM organization, 
          department 
        WHERE organization.bold_id = department.organization 
          AND Upper(searchkeysname) LIKE '%[[]%RG%]%' 
          AND Upper(searchkeysname) LIKE 
           '%[[]%TRANSPORT%]%') AS 
      weakMatch 
       ON weakMatch.bold_id = directMatch.bold_id 
ORDER BY directMatch.name, 
     weakMatch.name 

, хотя это предполагает, что directmatch всегда находится в пределах слабой пары

+0

Ваш запрос с результатом объединения в 1 строку, точное соответствие RG Transport. Я определенно не хорошо разбираюсь в SQL, но где добавлен новый столбец? И нет, я не могу предположить, что всегда найдено прямое совпадение. –

Смежные вопросы