我需要根据目前的语言从表格中选择细节。也就是说,我有一个主要的语言文化和一个中学文化。我需要为主要选择具有匹配行的行,如果有其他我需要为二级文化选择匹配的行。我有超过5个不同的表加入所有将具有相同的条件。
ID int
Name nvarchar(50)
MasterKey tinyint
Culture nvarchar(50)
Name Culture
----- -------
@#@$ en-AR
declare
@Primary nvarchar(20) = 'en-AR'
,@Secondary nvarchar(20) = 'en-US'
SELECT
LangTable1.Name AS Name
,LangTable1.Culture AS Culture
FROM
LangTable1
WHERE
LangTable1.Culture=case WHEN LangTable1.Culture=@Primary THEN @Primary
ELSE @Secondary
Name Culture
----- -------
Minhaj en-US
@#@$ en-AR
Nann en-US
答案 0 :(得分:1)
其他两种方法是使用UNION
第一个查询删除辅助语言的值,这些值与使用EXIST
DECLARE @primary nvarchar(20) = 'en-AR'
DECLARE @secondary nvarchar(20) = 'en-US'
SELECT Name, Culture
FROM LangTable1
WHERE Culture = @primary
UNION ALL
SELECT Name, Culture
FROM LangTable1 a
WHERE Culture = @secondary
AND NOT EXISTS (SELECT 1
FROM LangTable1 b
WHERE a.Name = b.Name
AND b.Culture = @primary)
第二个查询使用EXCEPT
DECLARE @primary nvarchar(20) = 'en-AR'
DECLARE @secondary nvarchar(20) = 'en-US'
SELECT Name, Culture
FROM LangTable1
WHERE Culture = @secondary
EXCEPT
SELECT Name, @secondary
FROM LangTable1
WHERE Culture = @primary
UNION ALL
SELECT Name, Culture
FROM LangTable1
WHERE Culture = @primary
答案 1 :(得分:0)
不确定你要的是什么
if exists(select name, culture from LangTable1 where culture=@Primary)
begin
select name, culture from LangTable1 where culture=@Primary
end
else
begin
select name, culture from LangTable1 where culture=@secondary
else
end
答案 2 :(得分:0)
这可能会给你你想要的东西:
;with cte(Name, Culture, CultureRank) as
(
select t.Name, t.Culture, case when t.Culture = @primary then 1 when t.culture = @secondary then 2 else 3 end CultureRank
from LangTable1 t
)
select c.Name, c.Culture
from cte c
where c.CultureRank < 3
and c.CultureRank = (select MIN(CultureRank) from cte c2 where c2.Name = c.Name)