SQL集合问题

SQL集合问题,sql,Sql,如何使以下sql语句成为查询中“集合”的一部分?我想在一列中列出一个列表,并让我的“集合”与之对抗。这样,我的“集合”就不仅仅是一个变量,而是一个要运行的列表。有意义吗 DECLARE @Item as char(32) declare @result varchar(max); SET @Item = '034100-3JK'; 我想使用类似于以下内容的内容来对其进行查询,而不是对034100-3JK进行查询: select distinct a.t_sitm as Sta

如何使以下sql语句成为查询中“集合”的一部分?我想在一列中列出一个列表,并让我的“集合”与之对抗。这样,我的“集合”就不仅仅是一个变量,而是一个要运行的列表。有意义吗

DECLARE @Item as char(32)
declare @result varchar(max);
SET @Item = '034100-3JK'; 
我想使用类似于以下内容的内容来对其进行查询,而不是对034100-3JK进行查询:

select distinct
        a.t_sitm as StartItem
from 
        ttibom010101 as a 
        INNER JOIN ttiitm001101 as b on a.t_sitm = b.t_item 
where 
        b.t_ctyp != 'TOP'
        and b.t_ctyp != 'SUB'

注意,只有当查询永远不会返回多个结果时,此操作才能正常工作。如果可以得到多个结果,请声明一个表varaiable而不是标量varaible,并插入insted的表varaiable中,然后在以后的处理中将其用作联接。

您没有提到使用的是哪种SQL风格,但可以使用游标或公共表表达式吗

编辑:基于提问者的评论

我注意到您正在显式地写出项目代码(或ID,无论您想叫它什么)。如果存在无法从数据库轻松检索的静态代码列表,可以执行以下操作:

DECLARE @Items TABLE
(
  item varchar(10)
)
INSERT INTO @Items
VALUES ('034007-3CL'),
('next_code'),
('next_next_code')
或者,如果可以轻松获取代码列表:

DECLARE @Items TABLE
(
  item varchar(10)
)
INSERT INTO @Items
SELECT a.items
FROM mytable AS a
WHERE a.column = condition
然后可以像普通表一样使用变量:

select 
   a.t_sitm as StartItem
   ,a.t_mitm
   ,a.t_sitm
   ,b.t_ctyp
   ,a.t_qana
from 
   ttibom010101 as a 
   INNER JOIN ttiitm001101 as b on a.t_sitm = b.t_item 
   INNER JOIN @items as c on a.t_sitm = c.item
where 
   b.t_ctyp != 'TOP'
   and b.t_ctyp != 'SUB'

问题与评论

我正在试着运行这个:选择a.t\U sitm 作为StartItem,a.têmitm,a.têsitm ,b.t_ctyp,a.t_qana,来自ttibom010101 作为内部接头TTITM001101作为b on a、 t_sitm=b.t_项目,其中b.t_ctyp= “TOP”和b.t_ctyp!='分包商和 a、 t_sitm=@Items

如果您所要做的只是针对列表进行测试,那么使用常量列表而不是变量

and a.t_sitm in ('abc','def','ghi')
如果试图将单个字符串参数传递给SQL Server,则需要一个函数将其拆分为表的行,首先从这里获取函数dbo.split(许多可用的“拆分”函数之一)

然后您可以使用此查询(在表单中)

或者以联合的形式

select a.t_sitm as StartItem ,a.t_mitm ,a.t_sitm ,b.t_ctyp ,a.t_qana
from ttibom010101 as a
INNER JOIN ttiitm001101 as b on a.t_sitm = b.t_item
inner join dbo.split(',',@item) S on S.Value = a.t_sitm
where b.t_ctyp != 'TOP' and b.t_ctyp != 'SUB'

我试着运行这个:从ttibom010101中选择a.t_-sitm作为StartItem,a.t_-mitm,a.t_-sitm,b.t_-ctyp,a.t_-qana作为a.t_-sitm=b.t_项的内部连接TTITM001101作为b,其中b.t_-ctyp!='TOP'和b.t_ctyp!='SUB'和a.t_sitm=@items我猜我的意思是,你实际上打算如何处理这个查询的结果。例如,您已经执行了原始查询,现在有了一个a.t_sitm中与您的条件匹配的值列表。你想用这些价值观做什么?啊。明白了,对不起。我计划将它们放在一个临时表中,以便运行查询,然后将查询放在DataCube的表中。这就是我所拥有的:
select a.t_sitm as StartItem ,a.t_mitm ,a.t_sitm ,b.t_ctyp ,a.t_qana
from ttibom010101 as a
INNER JOIN ttiitm001101 as b on a.t_sitm = b.t_item
where b.t_ctyp != 'TOP' and b.t_ctyp != 'SUB'
and a.t_sitm in (select Value from dbo.split(',',@item))
select a.t_sitm as StartItem ,a.t_mitm ,a.t_sitm ,b.t_ctyp ,a.t_qana
from ttibom010101 as a
INNER JOIN ttiitm001101 as b on a.t_sitm = b.t_item
inner join dbo.split(',',@item) S on S.Value = a.t_sitm
where b.t_ctyp != 'TOP' and b.t_ctyp != 'SUB'