标题可能不是最准确的,但我有以下图表:
注意,cultureTranslations表有一个来自其他3个PK
s的组合FK
和一个NVARCHAR(256)
列(resourceKey)。
CultureTranslations表保存的数据类似于:
ApplicationId | CultureCodeId | ResourceGroupId | ResourceKey | ResourceValue |
-------------------------------------------------------------------------------
1 | 1 | 1 | X | X (US)
1 | 1 | 1 | Y | Y (US)
1 | 1 | 1 | Z | Z (US)
....
1 | 2 | 1 | X | X (GB)
1 | 2 | 1 | Z | Z (GB)
and so on...
其中culturecoded 1=
en-US
,2=en-GB
。问题是,culture
en-GB
可能没有所有等价的en-US
记录的记录,只有一些记录。如何编写基于上述内容的查询或视图,以便将同一行/记录中不同区域性的资源组合在一起?
例如。:
s.ApplicationId | s.ResourceGroupId | s.ResourceKey | s.ResourceValue | d.ResouceValue |
----------------------------------------------------------------------------------------
1 | 1 | X | X (US) | X (GB)
1 | 1 | Y | Y (US) | null
1 | 1 | Z | Z (US) | Z (GB)
其中s=源区域性(
en-US
),d=目标区域性(en-GB
)。它应该始终显示源中的所有resourcekeys,但将
null
放入d.ResourceValue
列,在该列中找不到该特定resourcekey、applicationid和resourcegroupid的资源。 最佳答案
使用left join
并将where
子句的一部分放入join specification
将得到您要查找的结果。
测试设置:http://rextester.com/UXUZXH20794
create table CultureTranslation (
ApplicationId int not null
, CultureCodeId int not null
, ResourceGroupId int not null
, ResourceKey nvarchar(256)
, ResourceValue nvarchar(256)
);
insert into CultureTranslation values
(1,1,1,'X','X,(US)')
,(1,1,1,'Y','Y,(US)')
,(1,1,1,'Z','Z,(US)')
,(1,2,1,'X','X,(GB)')
,(1,2,1,'Z','Z,(GB)');
查询:
select
s.ApplicationId
, s.ResourceGroupId
, s.ResourceKey
, s.ResourceValue
, d.ResourceValue
from
CultureTranslation s
left join CultureTranslation d
on s.ApplicationId = d.ApplicationId
and s.ResourceGroupId = d.ResourceGroupId
and s.ResourceKey = d.ResourceKey
and d.CultureCodeId = 2
where s.CultureCodeId = 1
结果:
+---------------+-----------------+-------------+---------------+---------------+
| ApplicationId | ResourceGroupId | ResourceKey | ResourceValue | ResourceValue |
+---------------+-----------------+-------------+---------------+---------------+
| 1 | 1 | X | X,(US) | X,(GB) |
| 1 | 1 | Y | Y,(US) | NULL |
| 1 | 1 | Z | Z,(US) | Z,(GB) |
+---------------+-----------------+-------------+---------------+---------------+
关于sql - 将同一张表中的数据合并到同一条记录中,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/41957010/