从两个不同的表中检索数据并输出到列值

时间:2016-06-24 03:11:11

标签: sql-server

我有两张表,比如

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

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

现在我的查询(投诉)中只有1,3,5,6这样的ID  我希望输出像

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查询。我尝试了一些JOINS和CASE语句。这些ID来自列中的excel单元格值。

4 个答案:

答案 0 :(得分: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)

答案 1 :(得分: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的标准,但如果您手动选择它,则效果非常好。

答案 2 :(得分: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)

答案 3 :(得分: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)