Объединить две таблицы данных в одну - PullRequest
0 голосов
/ 11 мая 2019

Это может быть довольно легко, но я не могу понять это. В основном я конвертирую C # linq-запрос в sql-запрос для сокращения времени выполнения. Однако я не очень хорошо разбираюсь в SQL-запросах, поэтому мне сложно что-то найти. Вот мои две таблицы и их запись

HRMS_EodRecord

SELECT EmployeeId,HRMS_EodReferenceFk,ActualAmount FROM HRMS_EodRecord

В результате, как это:

EmployeeId    HRMS_EodReferenceFk    ActualAmount
   101                 1                 1000
   101                 2                  999
   101                 3                    0

И еще один стол

HRMS_EodReference

SELECT ID FROM HRMS_EodReference

В результате получилось так:

ID
1
2
3
4
5

Что я хочу объединить эти две таблицы данных и результат, как это

 EmployeeId    HRMS_EodReferenceFk    ActualAmount
   101                 1                 1000
   101                 2                  999
   101                 3                    0
   101                 4                    0 ----From HRMS_EodReference
   101                 5                    0 ----From HRMS_EodReference

Ответы [ 3 ]

0 голосов
/ 11 мая 2019

вы, вероятно, ищете SQL "правое соединение", ref: https://www.w3schools.com/sql/sql_join_right.asp

Ключевое слово RIGHT JOIN возвращает все записи из правой таблицы (table2) и соответствующие записи из левой таблицы (table1)).Результат равен NULL с левой стороны, когда нет совпадений.

 SELECT HRMS_EodRecord.EmployeeId, HRMS_EodReference.ID, HRMS_EodRecord.ActualAmount FROM HRMS_EodRecord
 RIGHT JOIN HRMS_EodReference ON HRMS_EodRecord.HRMS_EodReferenceFk = HRMS_EodReference.ID
0 голосов
/ 11 мая 2019

Если у вас есть только один идентификатор сотрудника,

select 101 as EmployeeId,
       ref.ID as HRMS_EodReferenceFk
       coalesce(rec.ActualAmount, 0) as ActualAmount
from HRMS_EodReference ref left join
     HRMS_EodRecord rec 
     on rec.HRMS_EodReferenceFk = ref.ID;

Предположительно, однако, вы хотите это для многих сотрудников одновременно.В этом случае сгенерируйте строки, используя cross join, затем используйте left join, чтобы ввести существующие значения:

select e.EmployeeId,
       ref.ID as HRMS_EodReferenceFk
       coalesce(rec.ActualAmount, 0) as ActualAmount
from (select distinct EmployeeId
      from HRMS_EodRecord
     ) cross join
     HRMS_EodReference ref left join
     HRMS_EodRecord rec 
     on rec.EmployeeId = e.EmployeeId and
        rec.HRMS_EodReferenceFk = ref.ID;
0 голосов
/ 11 мая 2019

Недостаточно информации о том, как EmployeeId связан в 2 таблицах, но это то, с чего можно начать:

SELECT  rec.EmployeeId              --> Insufficient info on relationship
        , ref.ID                    AS HRMS_EodReferenceFk
        , CASE WHEN rec.ActualAmount IS NULL THEN 0 ELSE rec.ActualAmount END
                                    AS ActualAmount
FROM    HRMS_EodReference           AS ref
        LEFT JOIN HRMS_EodRecord    AS rec ON rec.HRMS_EodReferenceFk = ref.ID;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...