hatena
hatena
2022/04/11 (月) 15:03:49
とりあえず下記でどうでしょう。
SELECT T1.*,
T2.終了日 Is Null And
Not (T1.開始日 Is Null OR T1.開始日=DMin("開始日","テーブル1","氏名='" & T1.氏名 & "'")) AS 開始日非連続,
T3.開始日 Is Null And
Not (T1.終了日 Is Null OR T1.終了日=DMin("終了日","テーブル1","氏名='" & T1.氏名 & "'")) AS 終了日非連続
FROM
(テーブル1 AS T1 LEFT JOIN テーブル1 AS T2 ON (T1.開始日-1=T2.終了日) AND (T1.氏名=T2.氏名))
LEFT JOIN テーブル1 AS T3 ON (T1.終了日+1=T3.開始日) AND (T1.氏名=T3.氏名);
出力結果例
ID | 氏名 | 会社 | 所属 | 開始日 | 終了日 | 開始日非連続 | 終了日非連続 |
---|---|---|---|---|---|---|---|
1 | あああ | xxxxx | 経理 | 2000/12/31 | 0 | 0 | |
2 | あああ | zzzzz | 人事 | 2001/01/01 | 2010/03/31 | 0 | -1 |
3 | あああ | ttttt | 総務 | 2010/04/02 | 2018/08/31 | -1 | 0 |
4 | あああ | xxxxx | 経理 | 2018/09/01 | 2020/03/31 | 0 | 0 |
5 | あああ | xxxxx | 人事 | 2020/04/01 | 0 | 0 | |
6 | いいい | xxxxx | 営業 | 2010/04/01 | 2019/01/31 | 0 | 0 |
7 | いいい | xxxxx | 経理 | 2019/02/01 | 2022/03/31 | 0 | 0 |
8 | いいい | xxxxx | 人事 | 2022/04/01 | 2022/05/31 | 0 | 0 |
ただし上記のクエリは更新不可になりますので、
この結果を見ながらテーブルを修正することになります。
通報 ...
hirotonさんが厳密なエラー例を出してますが、
上記のクエリは、このなかの、2. 3. 6. 7. はエラーになりません。
すべてのエラーに対応するなら、hirotonさん同様VBAを検討しますね。