Соедините 2 таблицы с одним и тем же столбцом и отобразите один и тот же столбец в один столбец. - PullRequest
0 голосов
/ 10 мая 2019

У меня есть 3 таблицы:

  1. DATA_IZIN_BODY
  2. DATA_IZIN_DETAIL
  3. DATA_IZIN_DETAILPC

Вот пример данных:

DATA_IZIN_BODY // UPDATE

|ID_B|NIK  |PERMIT TYPE|REASON       |NAME  |SUBMISSION DATE  |STATUS  |
|----|-----|-----------|-------------|------|-----------------|--------|
|N1  |1070 |ABSENT     |SICK         |John  |9/5/2019         |PENDING |
|N2  |1088 |LEAVE      |LATE         |Laura |8/6/2019         |APPROVED|
|N3  |1009 |ABSENT     |CANNT ATTND  |Emmet |8/8/2019         |APPROVED|

DATA_IZIN_DETAIL * // UPDATE ***

|ID  |ID_B |NIK  |DETAIL DATE  |DETAIL HOUR|STATUS  |FLAG|
|----|-----|-----|-------------|-----------|--------|----|
|001 |N1   |1070 |10/5/2019    |08.00      |NULL    |1   |
|002 |N1   |1070 |11/5/2019    |07.00      |NULL    |1   |
|003 |N1   |1070 |12/6/2019    |08.00      |NULL    |1   |
|004 |N3   |1009 |9/8/2019     |09.00      |NULL    |1   |
|005 |N3   |1088 |10/6/2019    |10.00      |NULL    |1   |
|006 |N3   |1009 |11/8/2019    |11.00      |NULL    |1   |

DATA_IZIN_DETAILPC * // UPDATE ***

|ID  |ID_B|NIK  |DETAIL DATE  |STATUS  |FLAG  |
|----|----|-----|-------------|--------|------|
|001 |N1  |1070 |13/5/2019    |NULL    |2     |
|002 |N1  |1070 |14/6/2019    |NULL    |2     |
|003 |N3  |1009 |12/8/2019    |NULL    |2     |

ЦЕЛЬ

|ID  |ID_B|NIK  |NAME  |PERMIT TYPE|REASON     |DETAIL DATE  |STATUS  |FLAG|
|----|----|-----|------|-----------|-----------|-------------|--------|----|
|001 |N1  |1070 |John  |ABSENT     |SICK       |13/5/2019    |NULL    |2   |
|002 |N1  |1070 |John  |ABSENT     |SICK       |14/6/2019    |NULL    |2   |
|003 |N3  |1009 |Emmet |ABSENT     |CANNT ATTND|12/8/2019    |NULL    |2   |
|001 |N1  |1070 |John  |ABSENT     |SICK       |10/5/2019    |NULL    |1   |
|002 |N1  |1070 |John  |ABSENT     |SICK       |11/5/2019    |NULL    |1   |
|003 |N1  |1070 |John  |ABSENT     |SICK       |12/6/2019    |NULL    |1   |
|004 |N3  |1009 |Emmet |ABSENT     |CANNT ATTND|9/8/2019     |NULL    |1   |
|005 |N3  |1088 |Emmet |ABSENT     |CANNT ATTND|10/6/2019    |NULL    |1   |
|006 |N3  |1009 |Emmet |ABSENT     |CANNT ATTND|11/8/2019    |NULL    |1   |

А вот мой запрос, пробовал с делом, но не будет работать, как ожидалось:

select 
    b.izin_id, b.IZIN_NIK
    /*case 
        when pc.Flag = 2 then 'PC'
        when d.Flag = 1 then 'DT'end
        as Flag*/
from DATA_IZIN_BODY b
inner join DATA_IZIN_DETAIL d on d.IZIN_ID = b.IZIN_ID
inner join DATA_IZIN_DETAILPC pc on pc.IZIN_ID = b.IZIN_ID

но как мы можем объединить:

  • DATA_IZIN_DETAIL.izin_id & DATA_IZIN_DETAILPC.izin_id в 1 столбец как идентификатор?
  • DATA_IZIN_DETAIL.Flag & DATA_IZIN_DETAILPC.Flag в 1 столбец как Флаг?

обновление

ON GOAL : COLUMN ID & FLAG CONTAIN VALUE OF DATA_IZIN_DETAILPC.ID & DATA_IZIN_DETAIL.ID, DATA_IZIN_DETAILPC.FLAG & DATA_IZIN_DETAIL.FLAG

обновление 2

Data_izin_body 

 1. ID_B : nvarchar 
 2. NIK : nvarchar 
 3. Permit_Type : nvarchar
 4. Reason : nvarchar 
 5. Name : nvarchar 
 6. Submission_Date : smalldatetime
 7. Status : nvarchar

Data_izin_detail

 1. ID : nvarchar
 2. ID_B : nvarchar 
 2. NIK : nvarchar 
 3. Detail_Date : smalldatetime
 4. Detail_Hour : nvarchar
 5. Status : nvarchar
 6. Flag : int

Data_izin_detailpc

 1. ID : nvarchar
 2. ID_B : nvarchar 
 2. NIK : nvarchar 
 3. Detail_Date : smalldatetime
 4. Status : nvarchar
 5. Flag : int

Ответы [ 2 ]

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

Таким образом, UNION ALL объединяет 2 вторичные таблицы. Затем основной стол присоединяется к этому.

 SELECT Details.ID,
     b.ID_B,
     b.IZIN_NIK AS NIK,
     b.Name,
     b.[Permit Type],
     b.Reason,
     Details.[Detail Date],
     Details.Status,
     Details.Source,
     Details.Flag
   FROM DATA_IZIN_BODY b
   JOIN 
          (SELECT ID, ID_B, [DETAIL DATE], STATUS, 'DT' AS Source, FLAG
           FROM DATA_IZIN_DETAIL

           UNION ALL

           SELECT ID, ID_B, [DETAIL DATE], STATUS, 'PC' AS Source, FLAG
           FROM DATA_IZIN_DETAILPC) AS Details
   ON b.ID_B = Details.ID_B 
   ORDER BY b.NAME, 
         Details.[DETAIL DATE]

Не уверен, что вам все еще нужен столбец FLAG, если у вас есть столбец Source ...

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

Кажется, что таблицы DATA_IZIN_DETAIL и DATA_IZIN_DETAILPC имеют одинаковую структуру поля. Если это предусмотрено, вы можете выполнить UNION для двух запросов SELECT:

SELECT [ID], [ID_B], [NIK], [NAME], [DETAIL DATE], [STATUS], [FLAG] FROM [DATA_IZIN_DETAILPC]
UNION ALL
SELECT [ID], [ID_B], [NIK], [NAME], [DETAIL DATE], [STATUS], [FLAG] FROM [DATA_IZIN_DETAIL]

Edit:

Исходя из последней информации в вашем обновленном вопросе, я бы предложил следующий запрос, чтобы получить желаемые результаты:

SELECT
    D.[ID],
    D.[ID_B],
    D.[NIK],
    B.[Name],
    B.[Permit_Type],
    B.[Reason],
    D.[Detail_Date],
    D.[Status],
    D.[Flag]
FROM
    [DATA_IZIN_DETAILPC] AS D
    INNER JOIN [DATA_IZIN_BODY] AS B ON B.[ID_B] = D.[ID_B] --AND B.[NIK] = D.[NIK]
UNION ALL
SELECT
    D.[ID],
    D.[ID_B],
    D.[NIK],
    B.[Name],
    B.[Permit_Type],
    B.[Reason],
    D.[Detail_Date],
    D.[Status],
    D.[Flag]
FROM
    [DATA_IZIN_DETAIL] AS D
    INNER JOIN [DATA_IZIN_BODY] AS B ON B.[ID_B] = D.[ID_B] --AND B.[NIK] = D.[NIK]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...