我有一个配置表,其中有30条默认配置记录。对于其他配置,我为那些不同的设置添加新记录。 例如:
ConfigurationId SettingKey SettingValue
1(default) A 2
1(default) B 5
1(default) C 9
. . .
. . .
2 A 5
3 B 7
在这里,您可以看到ConfigurationId 1,默认设置包含所有30个设置。 对于像2这样的其他配置只有A的设置而3只有B
所以当我获取Id 2的记录时,我希望2中不存在的所有SettingKey和SEttingValue应该来自1,而存在于2中的将被覆盖 像这样
ConfigurationId SettingKey SettingValue
2 A 5
2 B 5
2 C 9
因此对于2,所有30个设置应该来自1,它将被2中可用的设置覆盖。在设置键A中,已被2覆盖.B,C来自1
请问我是否不清楚。
答案 0 :(得分:0)
你可以试试这个。
DECLARE @SeletedConfigurationID int
SELECT Settingkey, SettingValue
FROM
(
SELECT SettingKey, SettingValue,
row_number() over (partition BY SettingKey ORDER BY ConfiurationID DESC) AS rn
FROM Configuration
WHERE ConfigurationID = 1
OR ConfigurationID = @SelectedConfigurationID
) AS Settings
WHERE rn = 1
ORDER BY SettingKey
内部派生查询从默认配置(ConfigurationID = 1)和所选配置的行中获取行。它为每个设置键设置一个行号,其中第1行将来自所选配置(如果存在)。否则,将使用默认配置中的值。
外部查询仅选择第一行,其中行号为1.