【发布时间】:2016-12-07 15:08:21
【问题描述】:
我正在尝试为不同表中的每一行获取循环结果。我需要知道每个销售代理在一个月内销售的产品线。
我有一个查询告诉我如何知道产品线的总数。我只需要在其中插入 where 条件中的“CODAGENT”,循环遍历 Agents TABLE 中的每个代理。所以做一个不是用sql语言的例子。
-----THIS IS NOT A USEFUL CODE, IT'S ONLY FOR UNDERSTANDING----
For Each Row in Agents TAble Do
Set #CODAGENT = Row 1,2,3,....
Select
-routine for selecting what i need with inside WHERE CODAGENT = #CODAGENT
Next Row
-----THIS IS NOT A USEFUL CODE, IT'S ONLY FOR UNDERSTANDING----
我需要获得这个结果,但在每个代理的单独表格中
SELECT
TABCATEGORIE.DESCRIZIONE,
TABCATEGORIESTAT.DESCRIZIONE,
LEFT(SUM(TOTNETTORIGA),LEN(SUM(TOTNETTORIGA))-2),
TABGRUPPI.DESCRIZIONE,
ANAGRAFICAAGENTI.CODAGENTE,
ANAGRAFICAAGENTI.DSCAGENTE
FROM dbo.TESTEDOCUMENTI
INNER JOIN dbo.RIGHEDOCUMENTI ON PROGRESSIVO=IDTESTA
INNER JOIN dbo.ANAGRAFICAARTICOLI
ON CODART=ANAGRAFICAARTICOLI.CODICE
INNER JOIN dbo.TABCATEGORIE ON CATEGORIA=TABCATEGORIE.CODICE
INNER JOIN dbo.TABCATEGORIESTAT ON CODCATEGORIASTAT=TABCATEGORIESTAT.CODICE
INNER JOIN dbo.TABGRUPPI ON GRUPPO=TABGRUPPI.CODICE
INNER JOIN dbo.ANAGRAFICAAGENTI ON ANAGRAFICAAGENTI.CODAGENTE=CODAGENTE1
WHERE dbo.TESTEDOCUMENTI.DOCCHIUSO = '0' AND dbo.TESTEDOCUMENTI.TIPODOC = 'FVC' AND dbo.TESTEDOCUMENTI.DATADOC BETWEEN DATEADD(MONTH, DATEDIFF(MONTH, 0, GETDATE())-2, 0) AND DATEADD(MONTH, DATEDIFF(MONTH, -1, GETDATE())-2, -1)
GROUP BY GRUPPO,CATEGORIA,CODCATEGORIASTAT,TABCATEGORIE.DESCRIZIONE,TABCATEGORIESTAT.DESCRIZIONE,TABGRUPPI.DESCRIZIONE,ANAGRAFICAAGENTI.CODAGENTE,ANAGRAFICAAGENTI.DSCAGENTE
ORDER BY CODAGENTE DESC
是意大利语,不知道你懂不懂
Sample Data
ANAGRAFICAAGENTI
CODAGENTE | DSCAGENTE
A1 | Agent Name
then there is the result of the query. So The result is
CATEGORY | CATEGORY2 |TOTNETTORIGA| GRUPPI | CODAGENTE | DSCAGENTE
------------+---------------+------------+------------------+-----------+----------
TAVOLI | TAVOLI | 22571.36 | PRODOTTO FINITO | A 77 | name
PENSILI | PENSILI | 1319.12 | PRODOTTO FINITO | A 77 | name
LAVATOIO | LAVATOIO | 7411.08 | PRODOTTO FINITO | A 77 | name
LAVATOIO | MACELLERIA | 505.00 | PRODOTTO FINITO | A 77 | name
MACELLERIA | MACELLERIA | 3762.00 | PRODOTTO FINITO | A 77 | name
LINEA PESCE | LINEA PESCE | 3824.00 | PRODOTTO FINITO | A 77 | name
TAVOLI | TAVOLI | 1073.60 | PRODOTTO FINITO | A 76 | name1
PENSILI | PENSILI | 262.80 | PRODOTTO FINITO | A 76 | name1
达到了这个新步骤以实现我的目标,但仍然无法正常工作。这是我的查询:
---CREO IL CURSORE C PER CALCOLARE GLI AGENTI---
DECLARE c CURSOR FOR
SELECT DISTINCT
ANAGRAFICAAGENTI.CODAGENTE
FROM dbo.ANAGRAFICAAGENTI
----DICHIARO LA VARIABILE PER AGENTE
DECLARE @AgentID VARCHAR(4)
----PRENDI IL PRIMO AGENTE E METTILO NELLA VARIABILE----
OPEN c
FETCH NEXT FROM c INTO @AgentID
WHILE @@FETCH_STATUS = 0
BEGIN
SELECT
ANAGRAFICAAGENTI.DSCAGENTE,
ANAGRAFICAAGENTI.CODAGENTE,
TABCATEGORIE.DESCRIZIONE,
TABCATEGORIESTAT.DESCRIZIONE,
LEFT(SUM(TOTNETTORIGA),LEN(SUM(TOTNETTORIGA))-2),
TABGRUPPI.DESCRIZIONE
FROM dbo.TESTEDOCUMENTI
INNER JOIN dbo.RIGHEDOCUMENTI ON PROGRESSIVO=IDTESTA
INNER JOIN dbo.ANAGRAFICAARTICOLI
ON CODART=ANAGRAFICAARTICOLI.CODICE
INNER JOIN dbo.TABCATEGORIE ON CATEGORIA=TABCATEGORIE.CODICE
INNER JOIN dbo.TABCATEGORIESTAT ON CODCATEGORIASTAT=TABCATEGORIESTAT.CODICE
INNER JOIN dbo.TABGRUPPI ON GRUPPO=TABGRUPPI.CODICE
LEFT JOIN dbo.ANAGRAFICAAGENTI ON ANAGRAFICAAGENTI.CODAGENTE=CODAGENTE1
WHERE ANAGRAFICAAGENTI.CODAGENTE = @AgentID AND dbo.TESTEDOCUMENTI.DOCCHIUSO = '0' AND dbo.TESTEDOCUMENTI.TIPODOC = 'FVC' AND dbo.TESTEDOCUMENTI.DATADOC BETWEEN DATEADD(MONTH, DATEDIFF(MONTH, 0, GETDATE())-2, 0) AND DATEADD(MONTH, DATEDIFF(MONTH, -1, GETDATE())-2, -1)
GROUP BY GRUPPO,CATEGORIA,CODCATEGORIASTAT,TABCATEGORIE.DESCRIZIONE,TABCATEGORIESTAT.DESCRIZIONE,TABGRUPPI.DESCRIZIONE,ANAGRAFICAAGENTI.CODAGENTE,ANAGRAFICAAGENTI.DSCAGENTE
ORDER BY CODAGENTE DESC,SUM(TOTNETTORIGA) desc
--PRENDI IL PROSSIMO AGENTE---
FETCH NEXT FROM c INTO @AgentID
END
--PULISCI---
CLOSE c
DEALLOCATE c
这让我有不同的表,我想,表中的每个代理一个。但它们都是空的。如果我在 WHERE 条件中删除 ANAGRAFICAAGENTI.CODAGENTE = @AgentID 我将获得相同的表,但每个表的结果相同。他们都是平等的。
【问题讨论】:
-
这是什么意思..设置#CODAGENT = Row 1,2,3,....
-
用表格解释你想要做什么,可能有一种方法没有循环
-
您可以使用 SQL 游标,如教程kodyaz.com/articles/cursor.aspx 中所示。但请注意,出于性能考虑,游标是解决 SQL Server 问题的最后方法
-
我需要获得这个结果,但在每个代理的单独文件夹中
-
请仅显示示例数据和所需结果。
标签: sql-server tsql sql-server-2005