Использовать результат запроса - PullRequest
0 голосов
/ 27 февраля 2019

У меня проблемы со следующим запросом.У меня есть две таблицы;Стол Orderheader и стол куплены.Первый запрос, который я выполняю, дает мне, например, две даты.Основываясь на этих двух датах, мне нужно найти производственные данные И, на основе производственных данных, мне нужно найти данные о покупке и объединить эти данные вместе.Допустим, я делаю следующее:

Select Lotdate From Orderheader where orhsysid = 1

Это приводит к двум строкам: «2019-02-05» и «2019-02-04».Теперь мне нужно сделать две вещи: мне нужно два запустить два запроса, используя этот набор результатов.Первый легко;используйте возвращенные даты и получите сумму в столбце A, например:

Select date, SUM(Amount) from Orderheader where date = Sales.date() [use the two dates here]

Второй вариант немного сложнее, мне нужно найти последний день, когда что-то было куплено, основываясь на двух датах.Производство каждый день, поэтому Productiondate = Sales.date () - 1.Но купленный происходит от производственного дня и не каждый день, поэтому для каждого производственного дня нужно найти последний купленный день.Так что я не могу сказать, где date = Orderheader.date.Мне нужно сделать что-то вроде:

Select date, SUM(Amount) 
FROM Bought 
WHERE date = (
    SELECT top 1 date 
    FROM Bought 
    WHERE date < Orderheader.date)

Но дважды, для обеих дат, которые я получил.Это должно привести к 1 таблице, дающей мне:

Bought.date, Bought.SUM(AMOUNT), Orderheader.date, Orderheader.SUM(AMOUNT)

Все на основе, возможно, кратного, числа (ов), которые я получил из первого запроса из таблицы продаж.

У меня естья боролся с этим какое-то время, используя соединения и вложенные запросы, но я не могу понять это!

Пример примера:

SELECT CONVERT(date,ORF.orfDate) as Productiedatum, SUM(orlQuantityRegistered) as 'Aantal'
FROM OrderHeader ORH
LEFT JOIN OrderFrame ORF ON ORH.orhFrameSysID = ORF.orfSysID
LEFT JOIN OrderLine ORL ON ORL.orhSysID = ORH.orhSysID
LEFT JOIN Item ON Item.itmSysID = ORL.orlitmSysID
where CONVERT(date,ORF.orfDate) IN
  (
      SELECT DISTINCT(CONVERT(date, Lot.lotproductiondate)) as Productiedatum
      FROM OrderHeader ORH
      LEFT JOIN Registration reg ON reg.regorhSysID = ORH.orhSysID
      LEFT JOIN StockRegistration stcreg ON stcreg.stcregRegistrationSysID = reg.regSysID
      LEFT JOIN Lot ON Lot.lotSysID = stcregSrclotSysID 
      WHERE ORH.orhSysID = 514955
      AND regRevokeRegSysID IS NULL
      AND stcregSrcitmSysID = 5103
  )
AND ORL.orlitmSysID = 5103
AND orldirSysID = 2
AND NOT orlQuantityRegistered IS NULL
GROUP BY Orf.orfDate

Пример вывода:

Productiedatum  Aantal
2019-02-05       20
2019-02-06       20

Здесь я использовал вложенный подзапрос, чтобы получить результаты из 'Production' (orderheader), потому что я простоможно использовать дату = дата.Я борюсь с частью продаж, где мне нужно найти последние даты и использовать эти даты в таблице продаж, чтобы получить сумму этой даты.

Ожидаемый результат:

Productiedatum  Aantal Boughtdate  Aantal
2019-02-04       20    2019-02-01  55
2019-02-05       20    2019-02-04  60

1 Ответ

0 голосов
/ 27 февраля 2019

Попробуй это.

IF OBJECT_ID('tempdb..#Production') IS NOT NULL DROP TABLE #Production
IF OBJECT_ID('tempdb..#Bought') IS NOT NULL DROP TABLE #Bought

CREATE table #Production(R_NO int,ProductionDate datetime,ProductionAmount float)
CREATE table #Bought(R_NO int,Boughtdate datetime,Boughtamount float)

insert into #Production(ProductionDate,ProductionAmount,R_NO)
select p.date ProductionDate,sum(Amount) ProductionAmount,row_number()over (order by p.date) R_NO 
from Production P
join Sales  s on p.date=S.date-1   
where orhsysid=1
group by p.date



declare @loop int,@ProdDate datetime
select @loop =max(R_NO) from #Production
while (1<=@loop)
begin

select @ProdDate=ProductionDate from #Production where r_no=@loop

insert into #Bought(Boughtdate,Boughtamount,R_NO)
select Date,Sum(Amount),@loop R_NO from Bought where date=(
select max(date) from bought B
where B.Date<@ProdDate)
group by Date

set @loop=@loop-1
end

select ProductionDate,ProductionAmount,Boughtdate,Boughtamount from #Bought B 
join #Production p on B.R_NO=P.R_NO
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...