Где оговорено на основе значения в таблице - PullRequest
1 голос
/ 07 января 2020

У меня есть доступ (только для чтения) к базе данных ms sql, где я хочу сделать выбор на основе оператора where, который хранится в таблице.

результат

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

- это

, где (Article.demand13 <= 0) и (Article.demand14 <= ​​0) и (Article.demand15 <= 0) и (Article.demand16 <= 0) и (Article.demand17 <= 0) и (Article.demand18 <= 0) и (Article.demand19 <= 0) и (Article.demand20 <= 0) и (Article.demand21 <= 0) и (Article.demand22 <= 0) и (Article.demandClass <= 7) и (Article.bufferConstant <= 0) и (Article.averageDemand> = 0.01) и ((Article.code> = '900000' и Article.code <= '999999 ')) </p>

моя попытка ->

 Declare @query Nvarchar(max)

set @query ='Select * from dbo.article as Article ' + (SELECT c.collectionsql 
FROM dbo.collections  AS c 
where c.description = '9-nummers laatste 9 maanden geen afzet'
 )

exec ( @query  )

Я получаю пустой результат. вероятно из-за части "Exe c". Есть ли более простой способ сделать выбор на основе объединения?


SELECT *
FROM dbo.Article  AS Article 
where (Article.demand13 <= 0) and (Article.demand14 <= 0) and (Article.demand15 <= 0) and (Article.demand16 <= 0) and (Article.demand17 <= 0) and (Article.demand18 <= 0) and (Article.demand19 <= 0) and (Article.demand20 <= 0) and (Article.demand21 <= 0) and (Article.demand22 <= 0) and (Article.demandClass <= 7) and (Article.bufferConstant <= 0) and (Article.averageDemand >= 0.01) and ((Article.code >= '900000' and Article.code <= '999999'))

дает примерно 243 строки даты из dbo.article. Проблема в том, что запрос, хранящийся в таблице dbo.collections, меняется каждый месяц. Эти данные я пытаюсь получить в Excel Power Pivot.

Ответы [ 3 ]

0 голосов
/ 07 января 2020

Я думаю, что вы на правильном пути, используя динамический запрос c и использование функции Exe c. Вам нужно выбрать, используя топ 1 для подзапроса, следующим образом.

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

OutPut

 demand13   demand14
-1              -2
-10              -2
0 голосов
/ 08 января 2020

Проблема была не в SQL -запросе, а в подключении к базе данных. он использовал соединение odb c, что создавало проблему. теперь с помощью SQLNCLI11

0 голосов
/ 07 января 2020

Полагаю, вы можете сначала присвоить результат первого запроса в переменную, а затем использовать эту переменную для создания запроса для его последующего выполнения -

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  )
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...