1

我有一个配置表,其中有 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 中可用的设置覆盖。在上面的 SettingKey A 已被 2 覆盖。B,C 来自 1

请问我是否不清楚。

4

1 回答 1

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。

于 2013-02-18T17:41:55.357 回答