我有两张表,比如
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单元格值。
答案 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)