Angel02
asked on
Query using openquery in a subquery
I have written the following query to obtain certain rows from a table tblShipping. I am pulling two columns (ReceivedDate, ReceivedBoxes) from a different table "tblInven" based on a subquery,
select * from (select a.ShipON dtShip,a.sender,a.product, a.name,a.u nits,a.uom ,a.type,a. [ORDER],
ISNULL((select convert(varchar(20),b.dtre c,101) from tblInven b where a.origid = b.sid and a.lot = b.lot
and a.[order] = b.[order] and a.product = b.product and a.boxnum=b.boxnum),'Not Received') ReceivedDate,
(a.Boxes) ConfirmedBoxes,(a.Shipping )Shipped,
ISNULL((select b.dtRec from tblInven b where a.origid = b.sid and a.lot = b.lot and a.[order] = b.[order]
and a.product = b.product and a.boxnum=b.boxnum),0) ReceivedBoxes,
(a.COST)FOB,a.MOVED,a.orig id
from tblshipping a
where convert(varchar(10),ShipOn ,101) < (getDate()-2)) q
order by dtship
Now I need to replace tblInven with a table in a different database that I can access using openquery. It has the same columns as tblInven. This is how I would access the new table
Select * from OpenQuery(ServerCDX, 'SELECT * from newINVEN order by dtec')
How can I include the newINVEN table in my query?
select * from (select a.ShipON dtShip,a.sender,a.product,
ISNULL((select convert(varchar(20),b.dtre
and a.[order] = b.[order] and a.product = b.product and a.boxnum=b.boxnum),'Not Received') ReceivedDate,
(a.Boxes) ConfirmedBoxes,(a.Shipping
ISNULL((select b.dtRec from tblInven b where a.origid = b.sid and a.lot = b.lot and a.[order] = b.[order]
and a.product = b.product and a.boxnum=b.boxnum),0) ReceivedBoxes,
(a.COST)FOB,a.MOVED,a.orig
from tblshipping a
where convert(varchar(10),ShipOn
order by dtship
Now I need to replace tblInven with a table in a different database that I can access using openquery. It has the same columns as tblInven. This is how I would access the new table
Select * from OpenQuery(ServerCDX, 'SELECT * from newINVEN order by dtec')
How can I include the newINVEN table in my query?
SOLUTION
membership
This solution is only available to members.
To access this solution, you must be a member of Experts Exchange.
ASKER
Well you are right. That is an ugly query. I am trying to but can't remember how I ended up on this! This is fortunately just a one-time query to generate a report. The other table in a different database that I am talking about is a simple DBF file. I think I'll go with openquery for now.
So I modified the query like this.
select * from (select a.ShipON dtShip,a.sender,a.product, a.name,a.u nits,a.uom ,a.type,a. [ORDER],
ISNULL((CASE WHEN convert(varchar(20),b.dtre c,101) IS NULL THEN c.dtrec ELSE convert(varchar(20),b.dtre c,101) END),'Not Received') ReceivedDate,
(a.Boxes) ConfirmedBoxes,(a.Shipping )Shipped,
ISNULL((CASE WHEN (b.RecBoxes) IS NULL THEN c.RecBoxes ELSE b.RecBoxes END),0) ReceivedBoxes,
(a.COST)FOB,a.MOVED,a.orig id
from tblshipping a
LEFT JOIN tblINVEN b
on a.origid = b.sid and a.lot = b.lot
and a.[order] = b.[order] and a.product = b.product and a.boxnum=b.boxnum
LEFT JOIN OPENQUERY(SERVERCDX, 'SELECT * FROM NewINVEN') AS c
on a.origid = c.sid and a.lot = c.lot
and a.[order] = c.[order] and a.product = c.product and a.boxnum=c.boxnum
where convert(varchar(10),ShipOn ,101) < (getDate()-2)) q
order by dtship
This looks like works good. I am getting the received boxes from NewInven if i don't find then in tblINVEN.
Now the question I have is if I have any boxes in tblINVEN or newINVEN that are not there in tblShipping, will they be displayed in the result? If not, what should I be doing?
So I modified the query like this.
select * from (select a.ShipON dtShip,a.sender,a.product,
ISNULL((CASE WHEN convert(varchar(20),b.dtre
(a.Boxes) ConfirmedBoxes,(a.Shipping
ISNULL((CASE WHEN (b.RecBoxes) IS NULL THEN c.RecBoxes ELSE b.RecBoxes END),0) ReceivedBoxes,
(a.COST)FOB,a.MOVED,a.orig
from tblshipping a
LEFT JOIN tblINVEN b
on a.origid = b.sid and a.lot = b.lot
and a.[order] = b.[order] and a.product = b.product and a.boxnum=b.boxnum
LEFT JOIN OPENQUERY(SERVERCDX, 'SELECT * FROM NewINVEN') AS c
on a.origid = c.sid and a.lot = c.lot
and a.[order] = c.[order] and a.product = c.product and a.boxnum=c.boxnum
where convert(varchar(10),ShipOn
order by dtship
This looks like works good. I am getting the received boxes from NewInven if i don't find then in tblINVEN.
Now the question I have is if I have any boxes in tblINVEN or newINVEN that are not there in tblShipping, will they be displayed in the result? If not, what should I be doing?
ASKER CERTIFIED SOLUTION
membership
This solution is only available to members.
To access this solution, you must be a member of Experts Exchange.
ASKER
There are also boxes in tblshipping that are not there in tblinven or newinven and I want those also in the report.
So I FULL JOIN to tblshipping too?
So I FULL JOIN to tblshipping too?
yes
Open in new window
but I wonder why you don't do a plain LEFT JOIN with this table...