Мне нужно сравнить столбцы CreatedDate
и TransactionDate
моей таблицы со всеми другими столбцами даты. Я хочу получить общее количество для каждой строки числа строк с датами, полностью выходящими за пределы CreatedDate
и TransactionDate
, внутри них, частично перекрывающимися и т. Д. c. Это должно быть сделано для обоих, если CreatedDate
после TransactionDate
или перед ним.
Я думал, что функция будет работать:
CREATE FUNCTION GetCountOfTransactions
(@TransactionID int,
@CreateDate datetime,
@TrxDate datetime)
RETURNS TABLE
AS
RETURN
(SELECT
st.transactionid,
CASE WHEN (@TrxDate > u/CreateDate) THEN 1 ELSE 0 END AS TAfterC,
SUM(CASE WHEN
((RCDate < u/CreateDate) AND (TrxDate < u/TrxDate) AND
(RCDate < u/TrxDate) AND (TrxDate < u/CreateDate))
THEN 1 ELSE 0 END) AS CT_ClowerCTlowerC
FROM
(SELECT
DATEADD(Day, DATEDIFF(Day, 0, TC.CreatedDate), 0) AS RCDate,
TC.Posted, TC.CreatedDate AS Created, BadT.*
FROM
Debug_BadTransaction BadT
LEFT JOIN
TrxControl TC ON BadT.TransactionMasterID = tc.TransMasterID) AS ST
WHERE
ST.transactionid <> u/TransactionID
GROUP BY
st.transactionid
)
Однако, когда я получаю поместить его в окружающий скрипт:
Поместить его в оператор выбора не получится, потому что он возвращает таблицу, а не скалярное значение:
SELECT
GetCountOfTransactionsGetCountOfTransactions(transactionid, TrxControl.Created, TrxControl.Posted),
BadT.*
FROM
Debug_BadTransaction BadT
LEFT JOIN
TrxControl TC ON BadT.TransactionMasterID = tc.TransMasterID
Вставка в качестве соединения не работает, потому что я хочу, чтобы это изменилось для каждой строки. Есть ли другой метод, который мне здесь не хватает, чтобы заставить эту конкретную ситуацию работать.
Может быть, это недостаток опыта, но Lag или Lead не будут работать, потому что это несколько значений вместо одного единственного значения.