我遇到了一个问题我真的不知道如何解决。
我有一个基本上使用执行命令执行循环的查询。我的结果将以空格返回,其中语句基本上会有一组空白数据。
即。我得到了多个按预期返回的结果集,并返回了一大堆没有数据的结果集。
请帮我一把,我真的完全迷失了,它让我在这里疯了。
DECLARE @CustomerRegion NVARCHAR(30)
DECLARE @Groups NVARCHAR(30)
DECLARE @BRANCH NVARCHAR(7)
DECLARE @getid CURSOR
SET @BRANCH = N'Patleys'
SET @getid = CURSOR FOR
SELECT
[Main_Reporting].[dbo].[Sales].[Customer Region],
[Main_Reporting].[dbo].[Sales].[Groups]
FROM
[Main_Reporting].[dbo].[Sales]
OPEN @getid
FETCH NEXT FROM @getid INTO @CustomerRegion, @Groups
WHILE @@FETCH_STATUS = 0
BEGIN
EXEC ('SELECT [Branch]
,[cust-number]
,[Customer Region]
,[Groups]
FROM [Main_Reporting].[dbo].[Sales]
WHERE -- Missed
[Customer Region] != ''1''
AND [Customer Region] = ''' + @CustomerRegion + '''
AND [Groups] = ''' + @Groups + '''
GROUP BY
[Branch], [cust-number]
, [Customer Region], [Groups]
ORDER BY
MAX([invoice-date]) DESC')
FETCH NEXT FROM @getid INTO @CustomerRegion, @Groups
END
CLOSE @getid
DEALLOCATE @getid
- 编辑 -
抱歉,我正在进行循环,因为它将使用组和客户区域的可能组合生成文件输出。
因此,在这个例子中,我将拥有10个不同的文件,每个文件都包含对于组和客户区域不同的数据。
不是生成几个脚本,而是每个循环都会运行,然后输出到文件并移动到下一个文件。这种方式我认为如果我添加任何新的东西会更好,E.I。我们有一个新的组加入,我们将生成另一个报告,其中包含其唯一数据。
希望这会有所帮助,对于早先模糊的探索感到抱歉。
答案 0 :(得分:0)
是的,你完全迷失了
一个选择 - 没有循环 - 没有光标
SELECT [Branch], [cust-number], [Customer Region], [Groups]
FROM [Main_Reporting].[dbo].[Sales]
where [Customer Region] != '1'
GROUP BY [Branch], [cust-number], [Customer Region], [Groups]
ORDER BY MAX([invoice-date]) DESC')
答案 1 :(得分:0)
您需要在光标中包含where条件。 " [客户区域]!='' 1''"在光标内部的选择中。当您发现客户区域为1的记录时,您会得到空白。
答案 2 :(得分:0)
好的,谢谢你,你的信息帮助了我。定义我的光标中的位置似乎可以正确获取我需要的所有内容。
我在两种情况下拉出了Where,所以当你分别做2或3时,我得到了我想要的各种输出。
所以基本上我的脚本现在就是这样。
DECLARE @CustomerRegion NVARCHAR(30)
DECLARE @Groups NVARCHAR(30)
DECLARE @BRANCH NVARCHAR(7)
DECLARE @getid CURSOR
SET @getid = CURSOR FOR
SELECT
[Main_Reporting].[dbo].[Sales].[Customer Region],
[Main_Reporting].[dbo].[Sales].[Groups]
FROM
[Main_Reporting].[dbo].[Sales]
WHERE [Customer Region] != ''1''
OPEN @getid
FETCH NEXT FROM @getid INTO @CustomerRegion, @Groups
WHILE @@FETCH_STATUS = 0
BEGIN
EXEC ('SELECT [Branch]
,[cust-number]
,[Customer Region]
,[Groups]
FROM [Main_Reporting].[dbo].[Sales]
WHERE [Customer Region] != ''1''
AND [Customer Region] = ''' + @CustomerRegion + '''
AND [Groups] = ''' + @Groups + '''
GROUP BY
[Branch], [cust-number]
, [Customer Region], [Groups]
ORDER BY
MAX([invoice-date]) DESC')
FETCH NEXT FROM @getid INTO @CustomerRegion, @Groups
END
CLOSE @getid
DEALLOCATE @getid
现在只需处理多个XLS输出:)
感谢帮助男女。