2013-12-19 51 views
0

我有一個包含數字和一些字符串行的列。我打算用數值的平均值替換字符串。我怎樣才能做到這一點?SSIS替換中位數的字符串

實施例:

1 4 
2 6 
3 NA 
4 10 
5 NA 
6 10 
7 5 

行號= 5 平均= 7

結果:

1 4 
2 6 
3 7 
4 10 
5 7 
6 10 
7 5 

回答

0

使用派生列用NULL替換NA。將數據存儲在兩個字段均爲int數據類型的登臺表中。你的舞臺看起來像這樣。請確保您的數據庫中沒有名爲Med的表格!

BEGIN TRAN 
IF EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[Med]') AND type in (N'U')) 
DROP TABLE [dbo].[Med] 

CREATE TABLE [dbo].[Med](
    [ID] [int] IDENTITY(1,1) NOT NULL, 
    [Val] [int] NULL 
) ON [PRIMARY] 

INSERT INTO [dbo].[Med] ([Val]) 
VALUES (4), (6), (null), (10), (null), (10), (5); 


SELECT * FROM Med; 

DECLARE @Average as int; ----- Choose the right data type to meet your requirement 

SELECT @Average = AVG (VAL) FROM Med; 

/* Replace Update with Merge to make it more efficient 
Update MED 
SET Val = 
CASE 
    WHEN Val IS NULL THEN @Average 
    ELSE Val 
END 
*/ 

MERGE MED as TARGET 
USING 
(
    SELECT ID FROM MED WHERE Val IS NULL 
) 
AS SOURCE ON SOURCE.ID = TARGET.ID 

WHEN MATCHED THEN 
UPDATE 
    SET TARGET.Val = @Average 
; 

SELECT * FROM Med 

ROLLBACK 

GO