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 に答える