问题描述
SELECT
CAST([patientDATA] AS XML).value('PatientcardCard[1]/Replacements[1]/patientId[1]','nvarchar(80)') [patientId],* into #tmp
FROM hospital [c1] with(NOLOCK)
where
patientserial in (
select ptserial From patients with(Nolock)
where patientsid=6889
and patientprogramid in (
26917,21296,27025
)
)
select patientId,patientbarcode,patientprogramID
into #tmp1
From #tmp
join patients with(nolock) on patientserial=ptserial
where patientid in
('0401478300007847','0401478300008566','0401478300008761','0401478300008727','0401478300007648','0401478300008020'
)
所以第一个查询是使用强制转换从列内的标签中获取值,标签是患者 ID,并将数据存储到临时表中。
第二个查询是从临时表中提取数据。我想在不使用临时表的情况下编写嵌套查询。但我一直有语法错误,这是我目前的查询:
select patientId,patientprogramID
From (
SELECT
CAST([patientDATA] AS XML).value('PatientcardCard[1]/Replacements[1]/patientId[1]',27025
)
)
)
join patients with(nolock) on patientserial=ptserial
where patientid in
('0401478300007847','0401478300008020'
)
invalid column in first line,around patientId,patientbarcode
and in join part,invalid column as ptserial
是不是因为值被强制转换了?
解决方法
您的方法存在一些问题。
-
SELECT *
不是一个好主意。它也似乎是不必要的 用于您的最终查询。 - 你应该每列参考哪个表 来自。
- 你可能想多了。
SELECT CAST([patientDATA] AS XML).value('PatientcardCard[1]/Replacements[1]/patientId[1]','nvarchar(80)') [patientId],patientbarcode,patiendprogramID
FROM hospital h
INNER JOIN patients p ON p.ptserial = h.patientserial
WHERE patientsid = 6889
AND patientprogramid IN (26917,21296,27025)
AND patientid IN (
'0401478300007847','0401478300008566','0401478300008761','0401478300008727','0401478300007648','0401478300008020'
)