如何在SQL Server中连接数据表和本地化表,每个数据id都有一行本地化表数据



我有一个包含数字数据的表,该表需要与各种不同语言的描述数据相匹配。这是通过具有一个"localizations"表来实现的,该表具有一个id列,该列是引用具有数据的表的FK。

我需要的是能够数据表连接到ID列上的本地化表;本地化";为每个id列匹配的行–根据所提供的语言和本地化选择最匹配的行。

例如:给定语言"en"和本地化"IN"(数据库中不存在(,我想取回与数据表连接的英语/GB数据。

本地化表如下所示:

本地化default_for_lang'US''GB''MX''US''MX'
id 语言其他数据
1 'en'true
1 'en'false
1 'es'false
1 'es' 'SP'
2 'en'
2 'en' 'GB' false
2 'es'false
2 'es' 'SP'

这与其说是一个答案,不如说是一种适用于我的用例的潜在解决方法。我会发帖,以防它能帮助任何有类似问题的人。

SELECT 
dt.*, l.name, l.notes, l.language, l.localization
FROM data_table dt
LEFT JOIN (
SELECT id,
STRING_AGG(language, '%%%') AS language, 
STRING_AGG(ISNULL([localization], '??'), '%%%') AS localization, 
STRING_AGG(name, '%%%') AS name, 
STRING_AGG(ISNULL([notes], ' '), '%%%') AS notes
FROM x_localizations_table
WHERE 
(language = @language OR language = 'en') AND 
(localization = @localization OR is_default_lang_localization = 1)
GROUP BY id
) l
ON t.id = l.id;

这将导致返回(对于"es SP"(:

ocalization ta]'US%%SP'
id[data]language
1'en%%es'
'[英文名称]%%[西班牙文名称]''[英语注释]%%[西班牙语注释]'

相关内容

  • 没有找到相关文章

最新更新