Step1: Create Sample Input Source Tables:
-----------------------------------------------------------------
-- Sample of Clinical trial data
CREATE TABLE [dbo].[Clinical_Trials]
(
Trial_ID INT,
Drug_Code VARCHAR(50),
Patient_Group VARCHAR(50),
Clinical_Response VARCHAR(100),
Efficiency_Rate DECIMAL(10,2)
);
INSERT INTO [dbo].[Clinical_Trials] VALUES
(1001, 'Drug_A01', 'Adults', 'Positive', 87.5),
(1002, 'Drug_B02', 'Children', 'Neutral', 65.0),
(1003, 'Drug_C03', 'Elderly', 'Negative', 42.3);
SELECT * FROM [dbo].[Clinical_Trials]
-- Sample of Production records
CREATE TABLE [dbo].[Production_Records]
(
Batch_ID INT,
Drug_Code VARCHAR(50),
Plant_ID VARCHAR(50),
Batch_Yield_Ratio DECIMAL(10,2),
Batch_Quantity DECIMAL(10,2)
);
INSERT INTO [dbo].[Production_Records] VALUES
(2001, 'Drug_A01', 'Plant_001', 95.2, 1200.5),
(2002, 'Drug_B02', 'Plant_002', 89.7, 980.0),
(2003, 'Drug_C03', 'Plant_003', 76.4, 750.2);
SELECT * FROM [dbo].[Production_Records]
-- Sample of Sales transactions CREATE TABLE [dbo].[Sales_Transactions]
(
Sale_ID INT,
Region VARCHAR(50),
Drug_Code VARCHAR(50),
Customer_Type VARCHAR(50),
Sales_Amount DECIMAL(10,2)
);
INSERT INTO [dbo].[Sales_Transactions] VALUES
(3001, 'North America', 'Drug_A01', 'Hospital', 15000.0),
(3002, 'Europe', 'Drug_B02', 'Pharmacy', 12000.5),
(3003, 'Asia', 'Drug_C03', 'Distributor', 9800.0);
SELECT * FROM [dbo].[Sales_Transactions]
----------------------------------------------------------------- Step 2: Create the Unified Output Table to store final Output Data:
-----------------------------------------------------------------
CREATE TABLE [dbo].[Unified_Data_Repository]
(
ID INT,
Criteria_Name VARCHAR(200),
Criteria_Value VARCHAR(200),
Src_Object_Name VARCHAR(200),
_LastModified_On DATETIME
);
-----------------------------------------------------------------
Step 3: Create a Temp Table with Source Table Names and Key Columns:
-----------------------------------------------------------------
IF OBJECT_ID('tempdb..##Src_Table_Mapping') IS NOT NULL
DROP TABLE ##Src_Table_Mapping;
CREATE TABLE ##Src_Table_Mapping (
Source_Table VARCHAR(128),
Key_Column VARCHAR(128)
);
INSERT INTO ##Src_Table_Mapping VALUES
('Clinical_Trials', 'Trial_ID'),
('Production_Records', 'Batch_ID'),
('Sales_Transactions', 'Sale_ID');
SELECT * FROM ##Src_Table_Mapping;
-----------------------------------------------------------------
Step 4: Dynamic SQL Query with Cursor to consolidate Data from all Source tables
-----------------------------------------------------------------
-- Declare variables to hold table name and SQL statement
DECLARE @TableName NVARCHAR(200);
DECLARE @sql NVARCHAR(MAX);
DECLARE @KeyColumn NVARCHAR(200);
-- Define a Cursor that will loop through all Source table names
DECLARE _CursorX Cursor FOR
SELECT Source_Table, Key_Column FROM ##Src_Table_Mapping;
-- Open the Cursor (initializes the result set)
OPEN _CursorX;
-- Fetch the first record (first table name from mapping)
FETCH NEXT FROM _CursorX INTO @TableName, @KeyColumn;
-- Loop until all records are processed
WHILE @@FETCH_STATUS = 0
BEGIN
SET @sql = '';
-- Build dynamic SQL for the _CursorXrent table
-- This Pivots columns into rows and inserts them into Unified_Data_Repository
SELECT @sql =
'INSERT INTO [dbo].[Unified_Data_Repository]
(ID, Criteria_Name, Criteria_Value, Src_Object_Name, _LastModified_On) ' +
(
SELECT STRING_AGG(
'SELECT ' + @KeyColumn + ' AS ID, ''' + COLUMN_NAME + ''' AS Criteria_Name, ' +
'CAST(' + COLUMN_NAME + ' AS NVARCHAR(200)) AS Criteria_Value, ' +
'''' + @TableName + ''' AS Src_Object_Name, GETDATE() AS _LastModified_On ' +
'FROM [dbo].[' + @TableName + ']',
' UNION ALL '
)
FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_NAME = @TableName
AND COLUMN_NAME <> @KeyColumn -- Exclude Key column from Pivot
);
-- Execute the dynamic SQL for this table
EXEC(@sql);
-- Fetch the next record (next table name)
FETCH NEXT FROM _CursorX INTO @TableName, @KeyColumn;
END
-- Close the Cursor (release resources)
CLOSE _CursorX;
-- Deallocate the Cursor (remove definition)
DEALLOCATE _CursorX;
-----------------------------------------------------------------
Step 5: View the final consolidated Output
-----------------------------------------------------------------
SELECT *
FROM [dbo].[Unified_Data_Repository]
ORDER BY Src_Object_Name, ID;