2013-02-18 89 views
1

我有一個配置表,其中有30個默認配置記錄。對於其他配置,我爲那些不同的設置添加新的記錄。 對於前:用於覆蓋記錄的SQL查詢

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只有乙

所以當我取記錄編號2,我想所有SettingKey和SEttingValue其不存在於2應來自1和2,其存在將被覆蓋 這樣

ConfigurationId  SettingKey   SettingValue 
2      A     5 
2      B     5 
2      C     9 

所以對於如圖2所示,所有30設定應來自1,其中將通過在第2可用設置在被覆蓋的正上方SettingKey A已被覆蓋由2 B,C是從1

請問我是否不清楚。

+0

什麼是[linq]標籤的用途? – 2013-02-18 19:40:55

回答

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.