Расчет в SQL Server 2012 - PullRequest
       16

Расчет в SQL Server 2012

0 голосов
/ 17 апреля 2019

Это мой код, который не работает должным образом.Мне нужна только одна запись для сотрудника, но она вставляет несколько

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%)'), то это не работает.

...