2016-06-24 18 views
2

我有2個表等檢索從兩個不同的表和輸出數據轉換成一列值

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

和我只有ID的樣1,3,5,6中的查詢

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

現在(投訴) 我想輸出像

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 Server 2008之上輸出的SQL查詢我已經嘗試了一些連接和CASE語句。這些ID來自列中的Excel單元格值。

回答

0
(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)) 

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) 
0

如何從工會選擇,您可以指定每個表的狀態:

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) 
0

也許類似的東西?

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) 

我不知道你的標準選擇該ID,但如果你手動選擇它,它完美的作品。

0
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) 

就個人而言,這是我將如何實現你的設計:

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 

那麼這將成爲:

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) 
相關問題