Inline sql удаляет дубликаты из результатов - PullRequest
0 голосов
/ 27 ноября 2018

У меня есть таблица с переводами на английский (en) и французский (fr).Я пытаюсь вернуться к en, когда fr данные недоступны с ctxt.Locale = 'fr' or ctxt.Locale = 'en'

Но, когда у меня есть fr запрос данных, получает как данные fr и en, так и обанаборы данных отображаются в пользовательском интерфейсе.

Мое требование - извлекать fr только при наличии данных и возвращаться к en при отсутствии fr данных.Каков наилучший способ сделать это?

Можно ли использовать команду IIF?

РЕДАКТИРОВАТЬ

Это полная команда SQL

SELECT
    ctxt.ID,
    ctxt.Locale,
    c.ID
FROM
    Category_Table c
INNER JOIN 
    Category_Table_Text ON c.ID = ctxt.ID
                        AND (ctxt.Locale = 'fr' OR ctxt.Locale = 'en')
WHERE 
    c.CatergoryID = 1

Редактировать 2

ctxt table

Ответы [ 2 ]

0 голосов
/ 27 ноября 2018

Поскольку это только 2, вы можете дважды присоединиться к контексту.И объединить пустое значение французского контекста.

Например,

SELECT 
c.ID, 
COALESCE(fr.Locale, en.Locale) AS Locale
FROM Category_Table c
LEFT JOIN Category_Table_Text fr ON fr.ID = c.ID AND fr.Locale = 'fr'
LEFT JOIN Category_Table_Text en ON en.ID = c.ID AND en.Locale = 'en'
WHERE c.CategoryID = 1

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

SELECT 
c.ID, 
COALESCE(ctxt.Locale, 'en') AS Locale
FROM Category_Table c
LEFT JOIN Category_Table_Text ctxt ON ctxt.ID = c.ID AND ctxt.Locale = 'fr'
WHERE c.CategoryID = 1

дБ <> скрипка здесь

0 голосов
/ 27 ноября 2018

Вы можете выбрать обе локали, добавить искусственный приоритет (согласно вашим правилам) и выбрать только одну из них (самую высокую):

select top 1 id, locale
from (
  select 1 as priority, id, locale from category_table
    where CatergoryID = 1 and locale = 'fr'
  union all
  select 2 as priority, id, locale from category_table
    where CatergoryID = 1 and locale = 'en'
) x
order by priority

Или ... вы можете написать:

select top 1 id, locale
from (
  select 
    case when locale = 'fr' then 1 else 2 end as priority, id, locale 
    from category_table
    where CatergoryID = 1 and (locale = 'fr' or locale = 'en')
) x
order by priority
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...