Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/74.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 其中子句基于表中的值_Sql_Sql Server_Powerquery - Fatal编程技术网

Sql 其中子句基于表中的值

Sql 其中子句基于表中的值,sql,sql-server,powerquery,Sql,Sql Server,Powerquery,我拥有对mssql数据库的只读访问权限,在该数据库中,我希望根据存储在表中的where语句进行选择 结果 SELECT c.collectionsql FROM dbo.collections AS c where c.description = '9-nummers laatste 9 maanden geen afzet' 是 其中Article.demand13我想您可以首先将第一次查询的结果分配到一个变量中,然后使用该变量构建一个查询,以便稍后运行- Declare @query

我拥有对mssql数据库的只读访问权限,在该数据库中,我希望根据存储在表中的where语句进行选择

结果

SELECT c.collectionsql 
FROM dbo.collections  AS c 
where c.description = '9-nummers laatste 9 maanden geen afzet'


其中Article.demand13我想您可以首先将第一次查询的结果分配到一个变量中,然后使用该变量构建一个查询,以便稍后运行-

Declare @query Nvarchar(max),
        @collections Nvarchar(max)

SELECT @collections = c.collectionsql 
FROM dbo.collections  AS c 
where c.description = '9-nummers laatste 9 maanden geen afzet'


set @query ='Select * from dbo.article as Article ' + @collections;

exec ( @query  )

我认为使用动态查询和Exec函数是正确的。您需要为子查询选择使用TOP1,如下所示

create table #Collections (Collectionsql varchar(250), description varchar(250))

insert into #Collections values('where (demand13 <= 0) and (demand14 <= 0)','9-nummers laatste 9 maanden geen afzet');


create table #Article  ( demand13 int, demand14 int)

insert into #Article values(-1,-2)
insert into #Article values(-10,-2)
insert into #Article values(-1,12)

Declare @query Nvarchar(max)

set @query ='Select * from #Article ' + (SELECT top 1 c.collectionsql 
FROM #Collections  AS c 
where c.description = '9-nummers laatste 9 maanden geen afzet'
 )

 print @query

 Exec(@query)

 drop table #Article
 drop table #Collections

问题不在SQL查询中,而是在与数据库的连接中。它使用的是odbc连接,这给te带来了问题。现在使用SQLNCLI11,where子句应该能够将c.description链接到查询中包含查找值的任何表。如果您希望进行数字比较,那么我建议您修改查询以反映相同的结果。由于描述是一个varchar列,无法进行数值比较。你好,Pwilcox,我在这里学习,所以非常感谢反馈。我的错误是得到的结果是空的,所以您的通用查询语法类似于表2中select description_2中的c.description;这将适用于精确匹配,即c.description与description完全匹配,因此这将是更好的语法?->“9-nummers laatste 9 maanden geen afzet”中的c.description@Tom,如果从dbo.collections中选择c.collectionsql作为c,其中c.description=“9-nummers laatste 9 maanden geen afzet”不返回任何行,@query变量将为NULL,这可能是导致此空结果的原因。
Declare @query Nvarchar(max),
        @collections Nvarchar(max)

SELECT @collections = c.collectionsql 
FROM dbo.collections  AS c 
where c.description = '9-nummers laatste 9 maanden geen afzet'


set @query ='Select * from dbo.article as Article ' + @collections;

exec ( @query  )
create table #Collections (Collectionsql varchar(250), description varchar(250))

insert into #Collections values('where (demand13 <= 0) and (demand14 <= 0)','9-nummers laatste 9 maanden geen afzet');


create table #Article  ( demand13 int, demand14 int)

insert into #Article values(-1,-2)
insert into #Article values(-10,-2)
insert into #Article values(-1,12)

Declare @query Nvarchar(max)

set @query ='Select * from #Article ' + (SELECT top 1 c.collectionsql 
FROM #Collections  AS c 
where c.description = '9-nummers laatste 9 maanden geen afzet'
 )

 print @query

 Exec(@query)

 drop table #Article
 drop table #Collections
 demand13   demand14
-1              -2
-10              -2