更快查询访问表的方法-英雄云拓展知识分享
283
2024-01-22
我有这个桌子
+------+------------+-----+| Code | date | qty |
+------+------------+-----+

| 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 cteAS (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
要生成日期,您可以随即在数据库中创建一个物理日历表并使用它。
免责声明:
本网址(www.yingxiongyun.com)发布的材料主要源于独立创作和网友匿名投稿。此处提供的所有信息仅供参考之用。我们致力于提供准确且可信的信息,但不对材料的完整性或真实性作出任何保证。用户应自行验证相关信息的正确性,并对其决策承担全部责任。对于由于信息的错误、不准确或遗漏所造成的任何损失,本网址不承担任何法律责任。本网站所展示的所有内容,如文字、图像、标志、音频、视频、软件和程序等的版权均属于原创作者。如果任何组织或个人认为网站内容可能侵犯其知识产权,或包含不准确之处,请即刻联系我们进行相应处理。
发表评论
暂时没有评论,来抢沙发吧~