-- sample data
DECLARE @Hist TABLE (Shp_cd int, wt_grp int, net_wt int, tot_wt int)
INSERT INTO @Hist (Shp_cd, wt_grp, net_wt, tot_wt) VALUES (101, 10, 9, 7)
INSERT INTO @Hist (Shp_cd, wt_grp, net_wt, tot_wt) VALUES (102, 20, 8, 2)
INSERT INTO @Hist (Shp_cd, wt_grp, net_wt, tot_wt) VALUES (103, 15, 4, 1)
DECLARE @Factor TABLE (Fact_ID INT IDENTITY(1,1), fact_column varchar(6), factor int)
INSERT INTO @Factor (fact_column, factor) VALUES ('wt_grp', 2)
INSERT INTO @Factor (fact_column, factor) VALUES ('net_wt', 5)
INSERT INTO @Factor (fact_column, factor) VALUES ('tot_wt', 3)
-- cross join to pick up factors
SELECT
h.shp_cd,
MAX(CASE WHEN f.fact_column = 'wt_grp' THEN wt_grp * factor END) AS wt_grp,
MAX(CASE WHEN f.fact_column = 'net_wt' THEN net_wt * factor END) AS net_wt,
MAX(CASE WHEN f.fact_column = 'tot_wt' THEN tot_wt * factor END) AS tot_wt
FROM
@Hist h
CROSS JOIN
@Factor f
GROUP BY h.Shp_cd -- to bring it down to a single resultset