Возможно ли использование SQL в SQL Server - отображение всех записей из таблицы A, даже если - PullRequest
0 голосов
/ 29 апреля 2019

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

Таблица A

 ImageId    ImageName
 ---------------------
 101        X-Ray
 102        MRI
 103        CTSCAN

Моя вторая таблица показывает отчеты по больницам для вышеупомянутого:

Таблица B

HospitalId Month  ImageId    NumberOfVisits
-------------------------------------------
111        1      101        20
111        1      102        30
222        1      101        21

Теперь я хотел бы создать запрос, подобный следующему. Я хочу показать все из таблицы A в таблице B, даже если запись из таблицы A не существует в таблице B

Таблица C

HospitalId Month   ImageName   NumberOfVisits
----------------------------------------------
111        1       X-Ray       20
111        1       MRI         30
111        1       CTSCAN       0
222        1       X-Ray       21
222        1       MRI          0
222        1       CTSCAN       0

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

Я попытался сделать это с помощью левого соединения, но это не помогло.

Я попытался объединить запрос, присоединяясь, но он не работает

SELECT        
    B.Hospitalid, A.ImageName, B.Month, B.NumberOfVisits
FROM          
    dbo.TableA A 
INNER JOIN 
    dbo.TableB B ON A.ImageId = B.ImageId

UNION ALL 

SELECT        
    B.Hospitalid, A.ImageName, B.Month, B.NumberOfVisits
FROM          
    dbo.TableA A 
INNER JOIN 
    dbo.TableB B ON A.ImageId = B.ImageId
WHERE
    A.ImageId & B.HospitalId NOT IN (SELECT A.ImageId&B.HospitalId 
                                     FROM dbo.TableA A 
                                     INNER JOIN dbo.TableB B ON A.ImageId = B.ImageId)

Я хочу показать все из таблицы A в таблице B, даже если запись из таблицы A не существует в таблице B

HospitalId Month   ImageName   NumberOfVisits
---------------------------------------------
111        1       X-Ray       20
111        1       MRI         30
111        1       CTSCAN       0
222        1       X-Ray       21
222        1       MRI          0
222        1       CTSCAN       0

1 Ответ

3 голосов
/ 29 апреля 2019

Используйте кросс-соединение, чтобы получить ваши изображения, больницы и месяцы.Затем оставьте присоединиться к TableB

with cte as (select     *
             from       (select distinct ImageId, ImageName from tableA) as a1
             cross join (select distinct HospitalId from tableB)         as b1
             cross join (select distinct month from tableB) as b2 )
select      cte.HospitalId
            , cte.Month
            , cte.ImageName
            , coalesce(tb.NumberOfVisits, 0) as NumberOfVisits
from        cte
left join   dbo.TableB as tb on  tb.HospitalId = cte.HospitalId
                             and tb.ImageId = cte.ImageId
                             and tb.Month = cte.Month
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...