Это мой код, который не работает должным образом.Мне нужна только одна запись для сотрудника, но она вставляет несколько
CREATE TABLE #Table1 (ID VARCHAR(5), formula VARCHAR(MAX))
CREATE TABLE #table2 (employeid VARCHAR(5), payhead VARCHAR(5), amount MONEY)
CREATE TABLE #table3 (employeid VARCHAR(5), payiD VARCHAR(5), amount MONEY)
INSERT INTO #Table1
VALUES ('PAY1', NULL), ('PAY2', '(PAY1*12%)'), ('PAY3', 'PAY1 + PAY2')
INSERT INTO #Table2
VALUES ('E001','PAY1', 2000),('E002','PAY1', 5000),('E003','PAY1', 3000)
INSERT INTO #Table2
VALUES ('E001','PAY3', 1000),('E002','PAY3', 3000),('E003','PAY3', 2000)
DECLARE @SQL VARCHAR (MAX) = ''
SELECT @SQL = @SQL + '
CROSS APPLY (
SELECT ' + ID + ' = ' + REPLACE(formula,'%','/100') + '
)
AS ' + ID + '
'
FROM #Table1
WHERE formula IS NOT NULL
SET @SQL = ';WITH cte AS
(
SELECT employeid, Amount as Pay1
FROM #table2
WHERE EMPLOYEID = ''E001''
)
SELECT *
INTO #TMP -- insert the result into a new temp table
FROM
cte ' + @SQL + '
INSERT #Table3
SELECT EmployeID, PayID, Amount
FROM #TMP
CROSS APPLY (
VALUES ' + STUFF(
(SELECT ',' + '(''' + ID + ''',' + ID + ')' FROM
#Table1 FOR XML PATH ('')), 1, 1, ''
) + '
) A(PayID, Amount)
SELECT * FROM #TMP
DROP TABLE #TMP'
PRINT(@SQL)
EXEC(@SQL)
SELECT * FROM #table3 WHERE employeid='E001'
DROP TABLE #table1
DROP TABLE #table2
DROP TABLE #table3
, моя проблема в том, что есть 2 сотрудника E001, E002 и три кода оплаты.но он показывает несколько. Во-вторых, если добавить pay3, как показано ниже ('PAY2', '(PAY1 + PAY3 * 12%)'), то это не работает.