ad

将同一列的日期分为多行,直到指定下一个日期值-SQL Server-英雄云拓展知识分享

匿名投稿 225 2024-01-22

我有这个桌子

+------+------------+-----+

| Code | date | qty |

+------+------------+-----+

将同一列的日期分为多行,直到指定下一个日期值-SQL Server-英雄云拓展知识分享

| 1 | 06-07⑵017 | 44 |

| 1 | 08-07⑵017 | 45 |

| 2 | 07-07⑵017 | 32 |

| 2 | 09-07⑵017 | 33 |

+------+------------+-----+

我想以这类方式显示

+------+------------+-----+

| Code | date | qty |

+------+------------+-----+

| 1 | 06-07⑵017 | 44 |

| 1 | 07-07⑵017 | 44 |

| 1 | 08-07⑵017 | 45 |

| 2 | 07-07⑵017 | 32 |

| 2 | 08-07⑵017 | 32 |

| 2 | 09-07⑵017 | 33 |

+------+------------+-----+

我想将相同的“代码”的日期拆分,并保存“ QTY”的相同值,直到下一个“代码”的下一个日期。

看答案

你需要一个 日历 桌子和 Outer Apply

;WITH cte

AS (SELECT Min([date]) AS st,

Max([date]) ed,

code

FROM Yourtable

GROUP BY code

UNION ALL

SELECT Dateadd(dd, 1, st) AS st,

ed,

code

FROM cte

WHERE Dateadd(dd, 1, st) <= ed)

SELECT c.code,

[date]=c.st,

qty

FROM cte c

OUTER apply (SELECT TOP 1 qty

FROM Yourtable a

WHERE a.code = c.code

AND c.st >= a.[date]

ORDER BY [date] DESC) oa

ORDER BY c.code,st

笔记 : 为了完全,我已使用过 Recursive CTE 要生成日期,您可以随即在数据库中创建一个物理日历表并使用它。

  • 现场演示


🚀🌟 点击注册 免费试用超级应用平台-英雄云企业级hpaPaaS 🌟🚀 😃👉🌐

免责声明:

本网址(www.yingxiongyun.com)发布的材料主要源于独立创作和网友匿名投稿。此处提供的所有信息仅供参考之用。我们致力于提供准确且可信的信息,但不对材料的完整性或真实性作出任何保证。用户应自行验证相关信息的正确性,并对其决策承担全部责任。对于由于信息的错误、不准确或遗漏所造成的任何损失,本网址不承担任何法律责任。本网站所展示的所有内容,如文字、图像、标志、音频、视频、软件和程序等的版权均属于原创作者。如果任何组织或个人认为网站内容可能侵犯其知识产权,或包含不准确之处,请即刻联系我们进行相应处理。

标签:SQL SQL-Server
上一篇:在其他html文件中使用OnClick Show hidden div-英雄云拓展知识分享
下一篇:同时使用Microsoft Office365(Outlook)API和Graph API-英雄云拓展知识分享
相关文章

 发表评论

暂时没有评论,来抢沙发吧~

×