标题可能不是最准确的,但我有以下图表:
sql - 将同一张表中的数据合并到同一条记录中-LMLPHP
注意,cultureTranslations表有一个来自其他3个PKs的组合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
问题是,cultureen-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/

10-15 18:14