简体   繁体   中英

Retrieve data from two different tables and output into a column value

I have 2 tables like

id  item deliveredon 
 1    x   12/06/2016
 2    y   14/06/2016
 3    z   18/06/2016

and

id item Returnedon  
4   a    20/06/2016
5   b    15/06/2016
6   c    22/06/2016

now i have only id's like 1, 3, 5, 6 in query(complaint) i want output like

id  item  status     date
1    x    delivered  12/06/2016
3    z    delivered  18/06/2016
5    b    returned   15/06/2016
6    c    returned   22/06/2016

sql query for above output in sql server 2008. I have tried some JOINS and CASE statements. Those ids come from a excel cell values in a column.

How about selecting from a union where you specify the status per table:

select id
, item
, status
, date
from (select id, item, deliveredon as date, 'delivered' as status from
table1
union all select id, item, Returnedon, 'returned' from
table2
) i
where id in (1, 3, 5, 6)

Maybe something like that?

SELECT * FROM
(
SELECT id,  item,  status, deliveredon as  date
FROM TableA
UNION
SELECT id,  item,  status, Returnedon  as  date
FROM TableB
) as TableAB Where id IN(1, 3, 5, 6)

I don't know your criterion to select that ID's but if you choose it manually it works perfectly.

select 
Id, 
Item, 
"Status" = case
when R.ReturnedOn is not null then 'returned'
when D.DeliveredOn is not null then 'delivered'
end,
"Date" = ISNULL(R.ReturnedOn, D.DeliveredOn)
from [DeliveryDates] D
full outer join
[ReturnedDates] R
on R.Id = D.Id
where Id in (1,3,5,6)

Personally, here's how I would implement your design:

table [Shipments]

Id item DeliveredDate ReturnDate
 1    x   12/06/2016   NULL
 2    y   14/06/2016   NULL
 3    z   18/06/2016   NULL
 4    a    NULL      20/06/2016
 5    b    NULL      15/06/2016
 6    c    NULL      22/06/2016

then it would become:

select 
Id, 
Item, 
"Status" = case
when ReturnedOn is not null then 'returned'
when DeliveredOn is not null then 'delivered'
end,
"Date" = ISNULL(ReturnedOn, DeliveredOn)
from [Shipments]
where Id in (1,3,5,6)
(select id,item,'delivered' as status,deliveredon from #table1 where id in (1,3,5,6)) 
UNION
(select id,item,'returned' as status,Returnedon from #table2 where id in (1,3,5,6))

or

    select id, item, status, date
    from (select id, item, 'delivered' as status, deliveredon as date from #table1
    UNION 
    select id, item,'returned' as status, Returnedon from #table2 ) t
    where id in (1, 3, 5, 6)

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM