访问加入后创建的新 table

Accessing a new table created after a join

我使用以下方法将 3 table 中的 select 列加入到新的 table 中:

    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;

这一切都有效,但我不确定如何引用从 XML 中提取的数据创建的列 SS,所以我只能 select 值所在的观察值是 "Yes" 或 "No"。在 R 中我会创建一个新对象,但如果我不指定 table 名称是什么,我不确定 SQL 如何存储这个新的 table。

旁注,我确实尝试将其插入到新的 table 中,但 SQL 不允许我这样做,因为由于某种原因,连接导致 PersonUid 被复制.

提前谢谢你,我对 SQL 非常非常陌生,正在努力学习。

这会将您的结果放入临时文件 table,并避免出现两列同名的问题:

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;

概念上 WHERE 出现在 SELECT 之前,因此您需要将查询推送到派生的 table 子查询或通用 Table 表达式 (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;