Parazival Ответов: 1

Как написать запрос в SQL для отображения максимального количества столбцов


У меня есть две таблицы, такие как DataHeader и DataDetail
я хочу отобразить замечания из таблицы DataDetail, которые имеют высокий DDid
и если замечаний не имеется в DataDetail затем я хочу, чтобы отобразить Примечания от DataHeader стол

как написать запрос на языке SQL

DataHeader
DHid A B C Замечания
1 abc 123 xyz DHidR1
2 bcd 252 jhyvb DHidR2
3 efg 541 sdh DHidR3

DataDetail
DHid DDid Примечания
1 1 работа
1 2 Работа
1 3 работал
2 1 Remarks1
2 2 Remarks2
2 3 Remarks3
2 4 Remarks4
2 5 Remarks5

я хочу, чтобы отобразить данные, как
DHid A B C Замечания
1 abc 123 xyz работал
2 bcd 252 jhyvb ремарки 5
3 efg 541 sdh DHidR3



Sry я не могу писать формат таблиц

Что я уже пробовал:

я попробовал левое внешнее соединение с Dataheader и показываю только замечания dataheader

1 Ответов

Рейтинг:
12

Richard Deeming

Что-то вроде этого:

SELECT
    DH.DHid,
    DH.A,
    DH.B,
    DH.C,
    IsNull(
        (
            SELECT TOP 1 DD.Remarks
            FROM DataDetail As DD
            WHERE DD.DHid = DH.DHid
            And DD.Remarks Is Not Null
            ORDER BY DD.DDid DESC
        ),
        DH.Remarks
    ) As Remarks
FROM
    DataHeader As DH
;

Или:
WITH cteDetail As
(
    SELECT
        ROW_NUMBER() OVER (PARTITION BY DHid ORDER BY DDid DESC) As RN,
        DHid,
        Remarks
    FROM
        DataDetail
    WHERE
        Remarks Is Not Null
)
SELECT
    DH.DHid,
    DH.A,
    DH.B,
    DH.C,
    IsNull(DD.Remarks, DH.Remarks) As Remarks
FROM
    DataHeader As DH
    LEFT JOIN cteDetail As DD
    ON DD.DHid = DH.DHid
    And DD.RN = 1
;


Maciej Los

О, нет! Еще 5!
:смеяться:

Parazival

он показывает только замечания DataDetail(высокое значение замечаний) только в том случае, если все они пусты из Datadetail, а не извлекает замечания из таблицы DataHeader .
Я попробовал первое решение
спасибо за повтор Ричард

Richard Deeming

Учитывая предоставленные вами примеры данных, оба запроса дают точный результат, который вы запросили.

Демонстрация[^]