Доступ к новой таблице, созданной после объединения - PullRequest
0 голосов
/ 30 января 2019

Я объединил выбранные столбцы из 3 таблиц в новую таблицу, используя следующее:

    SELECT A.ExternalID, A.UserDefinedXml.value('(Skin_Sheet/@Label)[1]', 'varchar(3)') AS SS, A.ServiceSiteUid, A.LastModifiedDate, A.PersonUid,
       B.FirstName, B.LastName, B.PersonUid,
       C.Name

  FROM Patient A
  INNER JOIN Person B ON B.PersonUid = A.PersonUid
  INNER JOIN ListServiceSite C ON C.ServiceSiteUid = A.ServiceSiteUid
  WHERE SS IS NOT NULL
  ORDER By LastModifiedDate;

Это все работает, но я не уверен, как ссылаться на столбец SS, созданный из данных, извлеченных изXML, поэтому я могу выбрать только те наблюдения, в которых значение «Да» или «Нет».В RI создал бы новый объект, но я не уверен, как SQL хранит эту новую таблицу, если я не укажу, каково имя таблицы.

Примечание: я пытался вставить это в новую таблицу, но SQL не позволил мне, потому что по какой-то причине соединение привело к дублированию PersonUid.enter image description here

Заранее спасибо, я очень, очень плохо знаком с SQL и пытаюсь учиться на лету.

Ответы [ 2 ]

0 голосов
/ 30 января 2019

Концептуально WHERE предшествует SELECT, поэтому вам нужно поместить запрос в подзапрос производной таблицы или выражение общей таблицы (CTE) для ссылки на SS в предложении WHERE.EG

with q as
(
    SELECT A.ExternalID, A.UserDefinedXml.value('(Skin_Sheet/@Label)[1]', 'varchar(3)') AS SS, A.ServiceSiteUid, A.LastModifiedDate, A.PersonUid,
       B.FirstName, B.LastName, B.PersonUid,
       C.Name

  FROM Patient A
  INNER JOIN Person B ON B.PersonUid = A.PersonUid
  INNER JOIN ListServiceSite C ON C.ServiceSiteUid = A.ServiceSiteUid
)
SELECT *
FROM q
WHERE SS IS NOT NULL
ORDER By LastModifiedDate;
0 голосов
/ 30 января 2019

Это поместит ваши результаты во временную таблицу и позволит избежать проблемы наличия двух столбцов с одинаковым именем:

SELECT
    A.ExternalID
    ,SS = A.UserDefinedXml.value('(Skin_Sheet/@Label)[1]', 'varchar(3)')
    ,A.ServiceSiteUid
    ,A.LastModifiedDate
    ,PersonUid_A = A.PersonUid
    ,B.FirstName
    ,B.LastName
    ,PersonUid_B = B.PersonUid
    ,C.Name
INTO #TempResults
FROM Patient A
INNER JOIN Person B ON B.PersonUid = A.PersonUid
INNER JOIN ListServiceSite C ON C.ServiceSiteUid = A.ServiceSiteUid
WHERE SS IS NOT NULL
ORDER BY LastModifiedDate;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...