不使用游标处理句点和日期
我想解决这个问题,避免使用游标(FETCH)。
问题来了......
1st Table/quantity
------------------
periodid periodstart periodend quantity
1 2010/10/01 2010/10/15 5
2st Table/sold items
-----------------------
periodid periodstart periodend solditems
14343 2010/10/05 2010/10/06 2
现在我想得到以下视图或只是查询结果
Table Table/stock
-----------------------
periodstart periodend itemsinstock
2010/10/01 2010/10/04 5
2010/10/05 2010/10/06 3
2010/10/07 2010/10/15 5
如果不使用游标或不使用单个日期而不是句点似乎不可能解决这个问题。
我将不胜感激任何帮助。
谢谢
I would like to solve this issue avoiding to use cursors (FETCH).
Here comes the problem...
1st Table/quantity
------------------
periodid periodstart periodend quantity
1 2010/10/01 2010/10/15 5
2st Table/sold items
-----------------------
periodid periodstart periodend solditems
14343 2010/10/05 2010/10/06 2
Now I would like to get the following view or just query result
Table Table/stock
-----------------------
periodstart periodend itemsinstock
2010/10/01 2010/10/04 5
2010/10/05 2010/10/06 3
2010/10/07 2010/10/15 5
It seems impossible to solve this problem without using cursors, or without using single dates instead of periods.
I would appreciate any help.
Thanks
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(5)
希望比马丁的更容易阅读。我使用了不同的表和示例数据,希望能够推断出正确的信息:
现在的实际查询是:
结果是:
说明:我正在使用三个通用表表达式。第一个(日期)是从涉及的两个表中收集我们正在讨论的所有日期。第二个(期间)从日期 CTE 中选择连续值。然后,第三个 (QuantitiesSold) 在 SoldItems 表中查找与这些时间段重叠的项目,并将它们的总数加在一起。外部选择中剩下的就是从数量表中存储的总量中减去这些数量
Hopefully a little easier to read than Martin's. I used different tables and sample data, hopefully extrapolating the right info:
The actual query is now:
And the result is:
Explanation: I'm using three Common Table Expressions. The first (Dates) is gathering all of the dates that we're talking about, from the two tables involved. The second (Periods) selects consecutive values from the Dates CTE. And the third (QuantitiesSold) then finds items in the SoldItems table that overlap these periods, and adds their totals together. All that remains in the outer select is to subtract these quantities from the total quantity stored in the Quantity Table
约翰,你可以做的是一个 WHILE 循环。在循环之前声明并初始化 2 个变量,一个是开始日期,另一个是结束日期。然后,您的循环将如下所示:
您需要将期间定义存储在另一个表中,以便您可以在临时表需要时检索这些并输出行。
如果您需要任何更详细的示例,或者我是否理解错误,请告诉我!
John, what you could do is a WHILE loop. Declare and initialise 2 variables before your loop, one being the start date and the other being end date. Your loop would then look like this:
You would need to store your period definitions in another table, so you could retrieve those and output rows when required to a temporary table.
Let me know if you need any more detailed examples, or if I've got the wrong end of the stick!
达米安,
我试图完全理解您的解决方案并在大规模数据上对其进行测试,但我收到您的代码的以下错误。
消息 102,级别 15,状态 1,第 20 行
“日期”附近的语法不正确。
消息 102,级别 15,状态 1,第 22 行
“,”附近的语法不正确。
消息 102,级别 15,状态 1,第 25 行
“,”附近的语法不正确。
Damien,
I am trying to fully understand your solution and test it on a large scale of data, but I receive following errors for your code.
Msg 102, Level 15, State 1, Line 20
Incorrect syntax near 'Dates'.
Msg 102, Level 15, State 1, Line 22
Incorrect syntax near ','.
Msg 102, Level 15, State 1, Line 25
Incorrect syntax near ','.
Damien,
根据您的解决方案,我还希望获得 StockItems 的整洁显示,而不会重叠日期。这个解决方案怎么样?
Damien,
Based on your solution I also wanted to get a neat display for StockItems without overlapping dates. How about this solution?