i am executing this query in sql server 2008 r2 the result is " Subquery returned more than 1 value. This is not permitted" Please help me -
select purchase_id , (case when (select source_type dbo.tbl_purchase purchase_id = tbl_purchase.purchase_id)=1 (select vessel_name dbo.tbl_vessel vessel_type=1) when (select source_type dbo.tbl_purchase purchase_id = tbl_purchase.purchase_id)=2 (select vessel_name dbo.tbl_vessel vessel_type=2) else (select jetty_name dbo.tbl_jetty ) end ) vessl_name tbl_purchase
i think want this:
select purchase_id , coalesce(v.vessel_name,j.jetty_name) vessl_name dbo.tbl_purchase p left join dbo.tbl_vessel v on p.source_type in (1,2) , v.vessel_type = p.source_type left join dbo.tbl_jetty j on p.source_type not in (1,2) otherwise, if you're wanting continue down case/subquery path, need fix these statements:
(select source_type dbo.tbl_purchase purchase_id = tbl_purchase.purchase_id) where both sides of comparison in fact referencing same table , same column, , return all rows tbl_purchase (except null purchase_id)
see query above how use aliases (p, v, j) on tables can specify correct source table each column reference. i.e. i'd expect like:
(select source_type dbo.tbl_purchase p2 p2.purchase_id = p1.purchase_id) assuming original tbl_purchase in outer from clause has been given alias p1.
further reading:
Comments
Post a Comment