所以我有一个可怕的查询,我试图在SQL Server中重写当前存在于MS Access中.基本上我得到的数据来自我试图根据特定标准过滤掉的文本文件.
我的问题是数据在文本文件中的方式.我的表与此类似:
Table1
BusinessDate DateTime
Amount money
User1 varchar
User2 varchar
User3 varchar
User4 varchar
... varchar
User16 varchar
Run Code Online (Sandbox Code Playgroud)
我有一个数据表,其中包含日期,然后有16列,其中的数据已由其他用户添加.此表中还有其他一些字段,但对于此问题它们是不必要的.
当前查询会对userId类似的15个值进行过滤.
SELECT *
FROM Table1
WHERE (User1 Like 'AB%' Or User1 Like 'CD%' Or User1 Like 'EF%'...)
OR (User2 Like 'AB%' Or User2 Like 'CD%' Or User2 Like 'EF%'...)
Run Code Online (Sandbox Code Playgroud)
我想要做的是将类似的值存储在一个表中,以便我可以在我的查询中加入它们.我不知道所有的值,所以我需要使用通配符,因为它可能是字母数字字符的任何可能组合.所以我会有一个这样的表:
ValueTable
AB%
CD%
EF%
HI%
...
Run Code Online (Sandbox Code Playgroud)
然后我的查询将与此类似,但我不认为这是可能的
SELECT *
FROM Table1
WHERE User1 Like IN (SELECT Value FROM ValueTable)
OR User2 Like IN (SELECT Value FROM ValueTable)
Run Code Online (Sandbox Code Playgroud)
可以这样做吗?如果是这样,应该使用什么语法,因为我完全被难倒了.
Mar*_*ith 12
SELECT *
FROM Table1
WHERE EXISTS (SELECT *
FROM ValueTable
WHERE User1 Like Value
OR User2 Like Value)
Run Code Online (Sandbox Code Playgroud)
或者(2008语法)
SELECT *
FROM Table1
WHERE EXISTS (SELECT *
FROM (VALUES(User1),
(User2),
(User3),
(User4),
/* ... */
(User15),
(User16) ) Users(U)
JOIN ValueTable
ON U Like Value)
Run Code Online (Sandbox Code Playgroud)