[英]Dynamic SQL with loop through table rows with cursor in SQL Server
[英]Loop through a cursor in SQL Server
我想了解如何在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
查看是否滿足您的需求:
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
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.