我有4个表在MSSQL中使用JOIN查询
1. 销售:ItemID,AreaCode,IndID,成本
2. Ind :AreaCode,IndID,Insite,InLocation
3. ItemPrice :ItemID,AreaID,IndID,ActicationDate,Price
4. 发票:ItemID,IndID,AreaId,InvoiceDate
我希望从表1中获取IndID和AreaCode,因为我想从Ind表中查找记录,并从这些记录中查找Insite和AreaCode,其中InLocation =''来自同一个表。
从那些记录获得IndID。
使用该IndID和ItemID,从ItemPrice表中找到该特定项的价格。该特定项目的价格来自activationDate,适用于基于日期的特定发票。
即如果激活日期是1月1日,价格是5美元 - >而发票日期是2,那么价格是5美元。但如果第二天ActivationDate是1月2日,价格更新为7美元。和发票创建于1月3日,价格应为7美元。
即。
得到这个:
寻找下面的东西
SELECT DISTINCT sl.AreaCode,sl.IndID,sl.cost,
id.IndID, id.AreaCode, id.InLocation, id.InSite,
id2.IndID, id2.AreaCode, id2.InLocation, id2.InSite,
ip.ItemId,ip.price,ip.ActivationDate,
iv.InvoiceDate
from Sales s
LEFT OUTER JOIN Ind id
ON s.IndID= id.IndID
AND s.AreaCode=id.AreaCode
LEFT OUTER JOIN Ind id2
ON id.AreaCode=id2.AreaCode
AND id.IndID=id2.IndID
AND id.InSite=id2.InSite
AND id.InLocation = ''
LEFT OUTER JOIN ItemPrice ip
ON s.ItemId=ip.ItemId
AND id2.AreaCode=ip.AreaCode
AND id2.IndID=ip.IndID
LEFT OUTER JOIN Invoice iv
ON s.ItemId=iv.ItemId
AND iv.InvoiceDate >= ip.ActivationDate
答案 0 :(得分:0)
终于破解了。
select *,
(select top 1 price
from itemPrice
where itemPrice.ActivationDate <= t.InvoiceDate
order by itemPrice.ActivationDate desc) as Price
from Invoice t
结果如下