Sql 选择具有优先级条件的列
我需要根据当前语言从表中选择详细信息。也就是说,我有初级语言文化和中级语言文化。我需要为主要区域性选择具有匹配行的行,如果有其他行,我需要为次要区域性选择匹配行。我有超过5个不同的表加入所有将有相同的条件 我的桌子 所需输出 查询 后果Sql 选择具有优先级条件的列,sql,sql-server-2008,tsql,Sql,Sql Server 2008,Tsql,我需要根据当前语言从表中选择详细信息。也就是说,我有初级语言文化和中级语言文化。我需要为主要区域性选择具有匹配行的行,如果有其他行,我需要为次要区域性选择匹配行。我有超过5个不同的表加入所有将有相同的条件 我的桌子 所需输出 查询 后果 不知道你要的是什么 if exists(select name, culture from LangTable1 where culture=@Primary) begin select name, culture from LangTable1 whe
不知道你要的是什么
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
这可能会给你想要的:
;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)
另外两种方法是使用联合体 第一个查询删除与使用EXIST检查的主语言值重复的辅助语言值 第二个查询使用EXCEPT删除与主语言值重复的辅助语言值
请考虑发布DB模式和期望的输出和业务规则!问题是什么?另外,更具体一点-您只希望返回一种语言,还是希望为传入变量的两种语言选择行?不,我只希望选择一种语言
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
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
;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)
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)
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