我有一张桌子,上面有英语(en
)和法语(fr
)的译文。当en
不能使用fr
数据时,我试图回退到ctxt.Locale = 'fr' or ctxt.Locale = 'en'
但是,当我拥有fr
数据查询时,会同时检索fr
和en
数据,并且两个数据集都显示在UI中。
我的要求是仅在有数据时检索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
答案 0 :(得分:1)
您可以选择两种语言环境,根据您的规则添加人为的优先级,并且只能选择其中一种(最高的语言环境):
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
答案 1 :(得分:0)
由于只有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
db <>提琴here