Я пишу начало SP для SQL-сервера, используя несколько операторов case и temp-таблиц с условным аргументом else else в конце, чтобы вычесть значения друг от друга на основе условное дело else.Microsoft SQL server CASE ELSE CASE не закрывается справа
Все работает нормально, пока не дойду до условного случая else, где по какой-то причине END не совсем прав.
Как вы можете видеть из инструкции условного case else, только одна синтаксическая ошибка в скобке после END.
Любые советы были бы весьма полезными.
Заранее спасибо.
--Creates a temp table to store the results of the cases below ans inserts them into the table.
CREATE TABLE #TotalBySlSsCs(
BoughtTotal FLOAT NULL,
SoldTotal FLOAT NULL,
SSaleTotal FLOAT NULL,
CShortTotal FLOAT NULL,
TotalQuanity Float NULL
)
INSERT INTO #TotalBySlSsCs(BoughtTotal, SoldTotal, SSaleTotal, CShortTotal)
-- Cases to total the quanities for portfilios and securities based on the transcode is in ('by', 'sl', 'ss', 'cs') plus the portfolio, security, and date selected by the user.
SELECT
SUM(CASE WHEN FundTransactions.TransCode='by' THEN (CAST(FundTransactions.Quantity AS FLOAT)) ELSE 0 END) AS 'BoughtTotal',
SUM(CASE WHEN FundTransactions.TransCode='sl' THEN (CAST(FundTransactions.Quantity AS FLOAT)) ELSE 0 END) AS 'SoldTotal',
SUM(CASE WHEN FundTransactions.TransCode='ss' THEN (CAST(FundTransactions.Quantity AS FLOAT)) ELSE 0 END) AS 'SSaleTotal',
SUM(CASE WHEN FundTransactions.TransCode='cs' THEN (CAST(FundTransactions.Quantity AS FLOAT)) ELSE 0 END) AS 'CShortTotal'
FROM FundTransactions
--The Where section will contain @parameters to let users select the portfolio, security, and date they need.
WHERE FundTransactions.PortfolioCode = 'EFS' AND FundTransactions.SecSymbol = 'VXX' AND FundTransactions.TradeDate= '2014-06-30'
GROUP BY FundTransactions.TransCode
--Group on Total Quanity to remove the second uneeded row which is created by the above cases and inserts it into temp table #TotalQuanities for calculations..
CREATE TABLE #TotalQuanities(
TotalQuanity VARCHAR(4) NULL,
TotalBy FLOAT NULL,
TotalSl FLOAT NULL,
TotalSs FLOAT NULL,
TotalCs FLOAT NULL
)
INSERT INTO #TotalQuanities(TotalQuanity, TotalBy, TotalSl, TotalSs, TotalCs)
SELECT #TotalBySlSsCs.TotalQuanity, MAX(#TotalBySlSsCs.BoughtTotal), MAX(#TotalBySlSsCs.SoldTotal), MAX(#TotalBySlSsCs.SSaleTotal), MAX(#TotalBySlSsCs.CShortTotal)
FROM #TotalBySlSsCs
GROUP BY #TotalBySlSsCs.TotalQuanity
--Case statement for subtracting the final figures from each other based on conditions within the case statement.
SELECT #TotalQuanities.TotalQuanity,
SUM(CASE WHEN #TotalQuanities.TotalBy = 0 AND #TotalQuanities.TotalSl = 0 AND #TotalQuanities.TotalSs = 0 AND #TotalQuanities.TotalCs = 0
THEN 0
ELSE
CASE WHEN #TotalQuanities.TotalBy != 0 AND #TotalQuanities.TotalSl != 0 AND #TotalQuanities.TotalSs != 0 AND #TotalQuanities.TotalCs != 0
THEN #TotalQuanities.TotalBy - #TotalQuanities.TotalSl - #TotalQuanities.TotalSs - #TotalQuanities.TotalCs
ELSE
CASE WHEN #TotalQuanities.TotalBy = 0 AND #TotalQuanities.TotalSl != 0 AND #TotalQuanities.TotalSs != 0 AND #TotalQuanities.TotalCs != 0
THEN #TotalQuanities.TotalSl - #TotalQuanities.TotalSs - #TotalQuanities.TotalCs
ELSE
CASE WHEN #TotalQuanities.TotalBy = 0 AND #TotalQuanities.TotalSl = 0 AND #TotalQuanities.TotalSs != 0 AND #TotalQuanities.TotalCs != 0
THEN #TotalQuanities.TotalSs - #TotalQuanities.TotalCs
ELSE
CASE WHEN #TotalQuanities.TotalBy = 0 AND #TotalQuanities.TotalSl = 0 AND #TotalQuanities.TotalSs = 0 AND #TotalQuanities.TotalCs != 0
THEN #TotalQuanities.TotalCs
END) AS 'TOTAL'
FROM #TotalQuanities
GROUP BY #TotalQuanities.TotalQuanity
--Drops the temp tables.
DROP TABLE #TotalBySlSsCs
DROP TABLE #TotalQuanities
Спасибо за помощь Гордон, оценить его. Также очень хорошая точка о одиночных кавычках. Лень с моей стороны. –