我想了解如何在SQL查询的Where子句中使用游标的内容。
我尝试运行下面的代码,但没有结果。
字段salescostindex允许我识别与客户进行的每笔交易的特定销售和成本。现在,我需要了解何时将成本预定到成本中心并将相应的销售额预定到另一个。这就是为什么需要循环的原因,对于成本帐户200001中每个相同成本中心的选择,我需要从销售帐户100001中排除成本中心。 现在,当我使用成本中心知道例程中正在发生这种情况时,此方法可以正常工作,但是当我让它在游标上循环时,不会返回任何结果。
这里是数据样本。 在SalesCostIndex字段中,您看到一个成本中心的分类帐200001和另一个成本中心的分类帐100001中分别显示了000010、000105、002008。 因此,我希望有一个查询,该查询仅选择出现在一个成本中心的分类帐200001和另一个成本中心的分类帐100001中的salescostindex。 现在,实际数据集中的成本中心已超过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
答案 0 :(得分:0)
看看这是否满足您的需求:
Select
SalesCostIndex
From dbo.Cost_Index As ci1
Inner Join dbo.Cost_Index As ci2
On ci2.SalesCostIndex = ci1.SalesCostIndex
Where ci1.Ledger = '100001'
And ci2.Ledger = '200001'
And ci1.CostCentre <> ci2.CostCentre