复杂的Sql连接查询用一些条件来获取其中一列

时间:2017-09-06 07:31:21

标签: sql-server sql-server-2008 sql-server-2014 sql-server-2016

我有2张桌子

表1:

Id | product | price
---+---------+------
1  |    A    |  5 
1  |    B    |  3
1  |    C    |  6

表2:

Id | prod | subprod
---+------+--------
1  |  A   |  xxxx
1  |  A   |  yyyy
1  |  A   |  zzzz

我的结果表应该包含table2中的所有3行以及一个名为price的新列(将从table1计算出来的值)

结果表应该看起来像

Id|prod|subprod|price
--+----+-------+-----
1 | A  | xxxx  |(if subprod = xxxx in table 2 then this should have price of A from table 1)
1 | A  | yyyy  |(if subprod = yyyy in table 2, then if price of B is greater than price of C then the value should be price of B else 0)
1 | A  | zzzz  |(if subprod = zzzz in table 2, then if price of B is less than price of C then the value should be price of C-B else 0) 

1 个答案:

答案 0 :(得分:0)

试试这个:

select distinct tab_2.*,case when tab_2.subprod ='xxxx' then (select tab_1.price from tab_1 where product='A') 
 when tab_2.subprod ='yyyy' then CASE WHEN  ( select price from tab_1 where product='B') > ( select price from tab_1 where product='C') THEN ( select price from tab_1 where product='B') else 0 end
 when tab_2.subprod ='zzzz' then CASE WHEN  ( select price from tab_1 where product='B') < ( select price from tab_1 where product='C') THEN ( select price from tab_1 where product='C') - ( select price from tab_1 where product='B') else 0 end
 END AS price
from tab_1,tab_2
where tab_1.Id =tab_2.id

输出: -

id  prod    subprod     price
1   A       xxxx        5
1   A       yyyy        0
1   A       zzzz        3

修改

 select distinct tab_2.*,case when tab_2.subprod ='xxxx' then (select tab_1.price from tab_1 where product='A') 
 when tab_2.subprod ='yyyy' then CASE WHEN  b.price > c.price THEN b.price else 0 end
 when tab_2.subprod ='zzzz' then CASE WHEN  b.price < c.price THEN c.price - b.price else 0 end
 END AS price
from tab_1,tab_2,( select id,price from tab_1 where product='B') b,( select id,price from tab_1 where product='C')c
where tab_1.Id =tab_2.id
and b.id =tab_2.id
and c.Id =tab_2.id