SQL集合问题
如何使以下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
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'