Я хотел бы понять, как я могу использовать содержимое курсора в предложении Where SQL-запроса.
Я попытался выполнить приведенный ниже код, но не получил результата.
Поле salescostindex позволяет мне определять конкретные продажи и затраты для каждой транзакции с клиентом.Теперь мне нужно понять, когда затраты регистрируются в МВЗ, а соответствующие продажи регистрируются в другом.Вот почему мне нужен цикл, мне нужно исключить МВЗ из счета продаж 100001 для каждого выбора одного и того же МВЗ в счете затрат 200001. Теперь, когда я использую МВЗ, где я знаю, что это происходит в процедуре, это работает, тем не менее, когда я позволяю циклу пересечь курсор, результат не возвращается.
Вот пример данных.в поле SalesCostIndex вы видите, что числа 000010, 000105, 002008 появляются в регистре 200001 в одном МВЗ и в регистре 100001 в другом МВЗ.Поэтому я хотел бы получить запрос, который собирает только индекс продаж, который отображается в бухгалтерской книге 200001 в одном МВЗ и в журнале 100001 в другом МВЗ.Теперь центры затрат в реальном наборе данных превышают 100.
+------------+------------+----------------+--------+-------------+
| Date | CostCentre | SalesCostIndex | Ledger | SalesAmount |
+------------+------------+----------------+--------+-------------+
| 2018-09-21 | 100 | 000010 | 100001 | -100 |
| 2018-09-01 | 100 | 000105 | 100001 | -154 |
| 2018-08-23 | 100 | 002008 | 200001 | 67 |
| 2018-08-23 | 100 | 001525 | 200001 | 45 |
| 2018-07-21 | 101 | 001731 | 100001 | -101 |
| 2018-08-23 | 101 | 000010 | 200001 | 80 |
| 2018-08-23 | 101 | 001964 | 200001 | 75 |
| 2018-08-23 | 101 | 002001 | 200001 | 112 |
| 2018-08-23 | 102 | 002245 | 200001 | 210 |
| 2018-08-23 | 102 | 000105 | 200001 | 125 |
| 2018-08-23 | 102 | 002008 | 100001 | -91 |
| 2018-08-27 | 102 | 002115 | 200001 | 25 |
+------------+------------+----------------+--------+-------------+
Я не мог попробовать подход, включающий вставку во временную таблицу.Это связано с тем, что у меня нет доступа на запись в базу данных, и я не могу создавать объекты, поэтому мне приходится придерживаться только результатов из операторов SELECT
или любых операторов, которые не записывают в базу данных.
DECLARE @CC VARCHAR(MAX)
DECLARE CCcursor CURSOR
FOR SELECT DISTINCT CostCentre FROM
LedgerTransactions
WHERE
Ledger='200001' and
Date = '2018-08-23' and
CostCentre like '1__'
OPEN CCcursor
FETCH NEXT FROM CCcursor
INTO @CC
WHILE @@FETCH_STATUS = 0
BEGIN
SELECT CostCentre,
SalesCostIndex,
Sum(SalesAmount) as TotalSales
FROM
LedgerTransactions
WHERE
Ledger='100001' and
CostCentre not in (@CC) and
SalesCostIndex in
(Select Distinct SalesCostIndex
FROM LedgerTransactions
WHERE
Ledger='200001' and
Date = '2018-08-23' AND
CostCentre in (@CC))
GROUP BY
CostCentre, SalesCostIndex
FETCH NEXT FROM CCcursor
INTO @CC
END
CLOSE CCcursor