2017-05-03 57 views
0

我一直在解决一个问题,我卡住了。我有两个表:SQL IF..ELSE方案

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名单SNAME从表1

我所做过目前是:

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 

这会给我的款项,但我停留在如何让名s与S2和S5,任何帮助将不胜感激。谢谢!

回答

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# 
+0

哇,完美的作品!非常感谢! –

+0

@R_Lothbrok乐意帮忙! – SqlZim