SQL IF..ELSE场景

时间:2017-05-03 14:51:12

标签: sql sql-server

我一直在解决问题而且我被困住了。我有两张桌子:

S#  Sname StatusNum City
s1  Smith 20 London                   
s2  Jones 10 Paris                    
s3  Blake 30 Paris                    
s4  Clark 20 London                   
s5  Adams 30 Athens    


S#  P#  J#  QTY
s1  p1  j1  200
s1  p1  j4  700
s2  p3  j1  400
s2  p3  j2  200
s2  p3  j3  200
s2  p3  j4  500
s2  p3  j5  600
s2  p3  j6  400
s2  p3  j7  800
s2  p5  j2  100
s3  p3  j1  200
s3  p4  j2  500
s4  p6  j3  300
s4  p6  j7  300
s5  p1  j4  100
s5  p2  j2  200
s5  p2  j4  100
s5  p3  j4  200
s5  p4  j4  800
s5  p5  j4  400
s5  p5  j5  500
s5  p5  j7  100
s5  p6  j2  200
s5  p6  j4  500  

我需要将表2中的数量相加并列出它们,但如果数量超过1000则列出表1中的Sname。

我目前所做的是:

Select SUM(qty) as total_sales, S#
From SPJ
Group by S#; 

给出了:

total_sales S#
900         s1  
3200        s2  
700         s3  
600         s4  
3100        s5   

这将给我总和,但我坚持如何获得S2和S5的名称,任何帮助将不胜感激。谢谢!

1 个答案:

答案 0 :(得分:3)

您可以将第一个表连接到包含聚合查询的派生表,并使用case表达式在销售额大于1000时显示名称:

select 
    t.S#
  , case 
      when s.total_sales >= 1000 
        then t.SName
      else ''
      end as SName 
  , s.total_sales 
from (
    Select SUM(qty) as total_sales, S#
    From SPJ
    Group by S#
    ) s
  inner join table1 t
    on s.S# = t.S#