Выберите данные на основе внутреннего ИЛИ левого соединения в таблице B - PullRequest
0 голосов
/ 15 июня 2019

У меня есть Таблица A и Таблица B, где я хочу выбрать Данные из Таблицы A (EmpID) с некоторыми объединениями и пунктами.Теперь я должен применить соединение с таблицей B (EMPID, NPINumber, NPIEndDate), все поля являются необязательными.

Но условие состоит в том, что NPIEndDate является необязательным полем в нашей базе данных Как NPIEndDate is Null OR NPIEndDate > = CurrentDate Теперь запишите в запрос

1.Выберите данные из таблицы A & B, если NPINumber существует
2.ВыберитеДанные из таблицы A & B, если NPIEndDate имеет значение Null ИЛИ NPIEndDate> = CurrentDate

CurrentDate: 27/06/2018

Таблица:

+-------+
| EmpId |
+-------+
|     1 |
|     2 |
|     3 |
|     4 |
+-------+

B таблица:

+-------+-----------+------------+
| EMPID | NPINumber | NPIEndDate |
+-------+-----------+------------+
|     1 |      1001 | NULL       |
|     2 |      1234 | 27/04/2018 |
|     3 |     12345 | 27/06/2018 |
+-------+-----------+------------+

Выход

+-------+-----------+------------+
| EMPID | NPINumber | NPIEndDate |
+-------+-----------+------------+
|     1 |      1001 | NULL       |
|     3 |     12345 | 27/06/2018 |
|     4 |           |            | 
+-------+-----------+------------+

Ответы [ 4 ]

1 голос
/ 15 июня 2019

Вы можете попробовать это:

SELECT 
      a.EMPID,b.NPINumber,b.NPIEndDate 
FROM A 
    LEFT JOIN B 
          ON a.EMPID=b.EMPID
WHERE ISNULL(b.NPIEndDate,GETDATE())>='2018-06-27 00:00:00.000'
0 голосов
/ 15 июня 2019

Это простое соединение с некоторыми условиями в предложении WHERE

SELECT *
FROM A INNER JOIN B
ON A.EMPID = B.EMPID
WHERE B.NPIEndDate IS NULL
      OR
      B.NPIEndDate >= '2018-06-27';

например:

SELECT *
FROM (VALUES (1), (2), (3)) A(EMPID) 
INNER JOIN 
(VALUES (1, 1001,NULL), (2, 1234,'2018-04-27'), (3, 12345,'2018-06-27'))B(EMPID, NPINumber, NPIEndDate)
ON A.EMPID = B.EMPID
WHERE B.NPIEndDate IS NULL
      OR
      B.NPIEndDate >= '2018-06-27'; --You can use GetDate() here if that what you mean by current date
0 голосов
/ 15 июня 2019

Если я понял ваш вопрос, вам нужно сделать объединение между таблицами, где EmpId совпадает с тем, как применить ваш фильтр.

SELECT 
  A.EmpID, B.NPINumber, B.NPIEndDate 
FROM 
  [Table A] A LEFT JOIN [Table B] B ON A.EmpID = B.EmpID 
WHERE 
  B.EmpID IS NULL 
  OR (NOT B.NPINumber IS NULL AND
  (B.[NPIEndDate] IS NULL OR B.[NPIEndDate] >= '2018/06/27'));

Вы можете поиграть с этим запросом здесь .

0 голосов
/ 15 июня 2019

Согласно тому, что я понимаю

SELECT 
 DATA 
FROM
  A
INNER JOIN B
ON (A.EmpID = B.EMPID AND (NPIEndDate <> '' or NPIEndDate is not null)

Обновление 2: По предоставленным вами данным

SELECT 
 DATA 
FROM
  A
INNER JOIN B
ON (A.EmpID = B.EMPID AND NPIEndDate >= CurrentDate AND (NPIEndDate = '' or NPIEndDate is null))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...