【发布时间】:2016-12-19 10:46:02
【问题描述】:
我需要一些帮助...所以,让我向您介绍我的问题。
我有以下 SQL Server 表:
| RankCode | SeaPortInd | WatchKeepingInd | EffectiveDate | VesselCode | FromDate | ToDate | LastDate | LastUser |
+----------+------------+-----------------+-------------------------+------------+-------------------------+-------------------------+-------------------------+----------+
| C/E | 0 | 0 | 1900-01-01 00:00:00.000 | 031 | 1900-01-01 05:00:00.000 | 1900-01-01 07:00:00.000 | 2016-08-11 12:40:00.000 | d.baltas |
| C/E | 0 | 0 | 2016-06-02 00:00:00.000 | 031 | 1900-01-01 00:00:00.000 | 1900-01-01 00:00:00.000 | 1900-01-01 00:00:00.000 | d.baltas |
| C/E | 0 | 1 | 2016-06-01 00:00:00.000 | 031 | 1900-01-01 01:00:00.000 | 1900-01-01 02:00:00.000 | 2016-08-11 17:58:00.000 | d.baltas |
| C/E | 0 | 1 | 2016-06-02 00:00:00.000 | 031 | 1900-01-01 01:00:00.000 | 1900-01-01 02:00:00.000 | 2016-08-10 17:58:00.000 | d.baltas |
| C/E | 1 | 1 | 2016-06-01 00:00:00.000 | 031 | 1900-01-01 03:00:00.000 | 1900-01-01 04:00:00.000 | 2016-08-10 17:58:00.000 | d.baltas |
| MSTR | 0 | 0 | 2016-06-02 00:00:00.000 | 031 | 1900-01-01 16:00:00.000 | 1900-01-01 22:00:00.000 | 2016-08-10 17:58:00.000 | d.baltas |
| MSTR | 0 | 1 | 2016-06-01 00:00:00.000 | 031 | 1900-01-01 08:00:00.000 | 1900-01-01 12:00:00.000 | 2016-08-10 17:58:00.000 | d.baltas |
| MSTR | 1 | 0 | 2016-06-03 00:00:00.000 | 031 | 1900-01-01 08:00:00.000 | 1900-01-01 14:00:00.000 | 2016-08-11 15:00:00.000 | d.baltas |
+----------+------------+-----------------+-------------------------+------------+-------------------------+-------------------------+-------------------------+----------+
我想得到如下表的输出:
表格的更多解释:
计划的每日海上工作时间意味着 SeaPortInd = 1
在港口安排的每日工作时间意味着 SeaPortInd = 0
Watchkeeping 意味着 WatchkeepingInd = 1
NonWatchkeeping 表示 WatchkeepingInd = 0
我设法拿到了下表:
+----------+--------------------+
| RankCode | SeaNonWatchkeeping |
| C/E | 00:00 - 00:00 |
| | 05:00 - 07:00 |
| MSTR | 16:00 - 22:00 |
+----------+--------------------+
用查询:
SELECT CASE
WHEN row_number() OVER (
PARTITION BY RankCode ORDER BY FromDate asc
) = 1
THEN RankCode
ELSE ''
END AS RankCode
,substring(convert(VARCHAR(255), FromDate, 120), 11, 6) + ' -' + substring(convert(VARCHAR(255), ToDate, 120), 11, 6) AS SeaNonWatchkeeping
FROM WorkingHoursSchedule WHERE SeaPortInd = 0 AND watchkeepingind = 0
您能帮我获取 SeaportInd = 0 和 Watchkeeping= 1 等案例吗?
我使用的是 SQL Server 2008,但查询也将在一些以前的版本中运行,最低版本为 SQL Server 2005
提前致谢!
【问题讨论】:
标签: sql sql-server sql-server-2008 tsql sql-server-2005