Когда данные в одной таблице ссылаются на имена схем в другой, вы можете использовать динамический SQL, чтобы написать запрос и выполнить его с помощью sp_executesql:
DECLARE @sql NVARCHAR(MAX)
SELECT @sql = (
SELECT STUFF(
(SELECT ' UNION ALL SELECT ' + CAST(Contract AS VARCHAR(25)) + ' AS Contract, ' +
'(SELECT ' + QUOTENAME(AGE) + ' FROM t2 WHERE Interval = t1.RD) AS Coefficient ' +
'FROM t1 WHERE contract = ' + CAST(Contract AS VARCHAR(25))
FROM t1
FOR XML PATH('')), 1, 11, '')
)
EXEC Sp_executesql @sql
Возвращает:
Contract Coefficient
194306 0,5
196797 0,7
197206 0,7
198381 0,85
198419 1,1
229896 0,85
41009438 1
41009448 0,85
(пример данных)
CREATE TABLE t1 (Contract INT, RD VARCHAR(25), AGE VARCHAR(25))
INSERT INTO t1 VALUES
(194306 ,'A0TO30' ,'60TO71'),
(196797 ,'A50TO70' ,'60TO71'),
(197206 ,'A50TO70' ,'60TO71'),
(198381 ,'A70TO90' ,'60TO71'),
(198419 ,'A150TO200' ,'60TO71'),
(229896 ,'A0TO30' ,'12TO23'),
(41009438 ,'A70TO90' ,'12TO23'),
(41009448 ,'A0TO30' ,'12TO23')
CREATE TABLE t2 (Interval VARCHAR(25), [12TO23] varchar(10), [24TO35] varchar(10), [36TO47] varchar(10), [48TO59] varchar(10), [60TO71] varchar(10), [72TO33] varchar(10))
INSERT INTO t2 VALUES
('A0TO30' ,'0,85','0,75','0,65','0,55','0,5','0,45'),
('A30TO50' ,'0,87','0,8', '0,75','0,7','0,65','0,6'),
('A50TO70' ,'0,9' ,'0,85','0,8','0,75','0,7','0,65'),
('A70TO90' ,'1' ,'0,95','0,9','0,85','0,85','0,85'),
('A90TO150' ,'1,2' ,'1,15','1,1','1,05','1,05','1,05'),
('A150TO200','1,3' ,'1,25','1,2','1,15','1,1','1,1')