【发布时间】:2021-11-05 22:21:53
【问题描述】:
我在 SQL Server 数据库中有车辆信息数据,如下所示:
| S.No | Vehicle_ID | status | date_on |
|---|---|---|---|
| 1 | 1 | Start | 2011-01-20 |
| 2 | 1 | Failed | 2011-01-23 |
| 3 | 1 | Start | 2011-01-26 |
| 4 | 1 | Failed | 2011-01-30 |
| 5 | 2 | Start | 2012-04-15 |
| 6 | 2 | Failed | 2012-04-20 |
| 7 | 3 | Start | 2019-06-23 |
| 8 | 4 | Start | 2021-07-23 |
| 9 | 4 | Start | 2021-08-25 |
| 10 | 4 | Failed | 2021-08-10 |
要求的结果是这样的:
| S.No | Min Date to Till date | Vehicle_ID 1 | Vehicle_ID 2 | Vehicle_ID 3 | Vehicle_ID 4... |
|---|---|---|---|---|---|
| 1 | 2011-01-20 | 1 | 0 | 0 | 0 |
| 2 | 2011-01-21 | 2 | 0 | 0 | 0 |
| 3 | 2011-01-22 | 3 | 0 | 0 | 0 |
| 4 | 2011-01-23 | 4 | 0 | 0 | 0 |
| 5 | 2011-01-24 | 4 | 0 | 0 | 0 |
| 6 | 2011-01-25 | 4 | 0 | 0 | 0 |
| 7 | 2011-01-26 | 5 | 0 | 0 | 0 |
| 8 | 2011-01-27 | 6 | 0 | 0 | 0 |
| 9 | 2011-01-28 | 7 | 0 | 0 | 0 |
| 10 | 2011-01-29 | 8 | 0 | 0 | 0 |
| 11 | 2011-01-30 | 9 | 0 | 0 | 0 |
| 12 | 2011-01-31 | 9 | 0 | 0 | 0 |
| 13 | 2011-02-01 | 9 | 0 | 0 | 0 |
| 14 | .......... | 9 | 0 | 0 | 0 |
| .... | 2012-04-15 | 9 | 1 | 0 | 0 |
| .... | 2012-04-20 | 9 | 6 | 0 | 0 |
| .... | 2019-06-23 | 9 | 6 | 1 | 0 |
| .... | 2019-06-24 | 9 | 6 | 2 | 0 |
| .... | Till today | 9 | 6 | Till today day count | XXXX |
-
Min Date到Till date列的开始日期应从源表中的date_on列的最短日期到达。 -
天数将从
status列开始计算。如果车辆状态为“失败”,则停止计算日期并坚持之前的计数。
示例车辆 ID = 3:
开始日期 = 2019-06-23
这里,Vehicle ID = 3 没有失败的日期,所以我们计算到今天为止的天数。
我尝试使用 PIVOT 获取动态列结果,但我仍在努力计算每个车辆 ID 的天数。
【问题讨论】:
-
根据问题指南,请展示您的尝试并告诉我们您发现了什么(在本网站或其他地方)以及为什么它不能满足您的需求。
-
您希望从
2011-01-20到今天的所有日子都作为单独的行吗?那是 3885 行。你有日历表吗? -
@Charlieface。是的,我希望从 '2011-01-20' 到今天的所有日子都作为单独的行。 SQL 中没有创建日历表
-
你知道你有多少辆车吗?
-
@Charlieface- 车辆也是动态的。它可能会定期增加。
标签: sql sql-server database tsql view