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.