【发布时间】:2014-03-09 20:49:28
【问题描述】:
好的,我对此进行了广泛的研究,并尝试了许多技术均无济于事。
我有一个名称列表,我有一个位置列表。某些位置包含完整的名称字符串。
我只想提取其中包含名称的位置,并且我不想从 %names% 的硬编码列表中进行检查,需要可扩展。 我正在使用的内容如下(我不会每次都检查现有的临时表,sry 不是真的需要)
所有查询都单独工作,除了最后一个我最终尝试组合的查询
IF OBJECT_ID('tempdb..#ProviderList') IS NOT NULL
DROP TABLE #ProviderList
SELECT distinct
Station
,StaffName --first and last concatenated
,lastName
,ProviderID
--,[ProviderRole]
INTO #ProviderList
FROM --Omited--
Where PrimaryProviderSID in (Select distinct
PrimaryProviderSID
----
Where PrimaryPosition not like '%zz%'
AND PrimaryProviderID > 0)
AND [TerminationDate] is null
AND (InactivationDate is null)
Select LastName
INTO #LastName
from #ProviderList
/* Failed experiment
Declare @Names as Table(Name varchar(max))
Insert Into @Names Select LastName
from #ProviderList
--Select* From @Names
Failed experiment
*/
SELECT distinct [Many fields...],
LocationName
Into #LocationName
FROM ------
Where LocationName not like '%z%'
AND ---filtering criteria to make my list
---------------结合在一起的部分
我想从 #LocationName 中选择 Everyting,但只选择包含 Names 列表中 ANY 记录的记录,它们只会包含一个或不包含任何记录
Select *
From #LocationName
Where #LastName in (LocationName)?
Where '%' + LastName + '%' ? --tried concatenation, i want a fuzzy search
Where #LocationName contains(LocationName, #LastName)? ---i know syntax is wrong but this has not proven to be the correct technique anyway
Where Exists(Select LastName from #LastName) --made no change but Not Exists returned nothing...
---------同事刚刚给我带来了这个:
select lastname
from #LastName
Where charindex(LastName,
(SELECT STUFF((SELECT ',' + LocationName
FROM #LocationName
FOR XML PATH('')) ,1,1,'') AS Txt )
)>1
------但这只会给我们一个包含在 LocationName 字段中的名称列表,我们还想提取位置名称
我知道这是一篇很长的文章,但我希望我相对清楚地知道至少需要做什么,如果不是我该怎么做的话。
我觉得我想创建一个数组并单独比较每个 Name 值以查看它是否包含在 LocationName 中,如果是,则将其添加到新列表中。这将是理想的
【问题讨论】:
-
一组数据样本可能会阐明您的要求。我认为您的说法是,表名称(名称)的值类似于“鲍勃”和“吉姆”,表位置(位置名称等)的位置名称值类似于“鲍勃之家”、“吉姆斯办公室”、“乔斯蟹棚” '。并且您想选择包含“house of bob”或“jims office”的行,因为它们的值包含其中一个名称。
-
^完全正确
标签: arrays tsql compare contains exists