用 where 连接两个 table

Join two table with where

我有两个来自两个视图的查询

查询 1:

SELECT sum(cancels) as cancelcount,codeprogram 
FROM CanceliTems 
WHERE date_save BETWEEN '1/21/2022' AND 
'2/20/2022' and usercode = 8066
GROUP By codeprogram

结果是:

cancelcount codeprogram
7 3001
7 3002
2 3006

查询 2:

SELECT SUM(sellcount) sellcount,codeprogram,price 
FROM sells
WHERE date_save BETWEEN '1/21/2022' AND '2/20/2022' and usercode = 8066
GROUP By codeprogram,price

结果是:

sellcount codeprogram price
27 3001 10000
25 3000 20000
9 3006 25000
3 3011 15000
8 3008 11000
55 3002 50000

如何加入两个视图,然后从销售数量中减去取消数量,最后将数量乘以价格,在指定的日期范围内?

在每个视图中,我都有字段 date_save(日期时间),它由 getdate() 和用户代码填充。

finalcount = (sellcount - cancelcount) * price

我希望最终输出如下:

finalcount codeprogram price
20 3001 200000
25 3000 500000
7 3006 175000
3 3011 45000
8 3008 88000
47 3002 2350000

谢谢

您可以尝试将两个子查询与 OUTER JOIN

一起使用的一种方法
SELECT sellcount - ISNULL(cancelcount,0) finalcount,
       t1.codeprogram,
       t1.price
FROM (
    SELECT SUM(sellcount) sellcount,codeprogram,price 
    FROM sells
    WHERE date_save BETWEEN '1/21/2022' AND '2/20/2022' and usercode = 8066
    GROUP By codeprogram,price
) t1
LEFT JOIN (
    SELECT sum(cancels) as cancelcount,codeprogram 
    FROM CanceliTems 
    WHERE date_save BETWEEN '1/21/2022' AND '2/20/2022' and usercode = 8066
    GROUP By codeprogram
) t2 ON t1.codeprogram = t2.codeprogram

根据您的查询,您可以重写如下,使用 UNION ALL 结合 sells & CanceliTems 并制作一个标志来表示 1 是 正数,2为负数则使用条件聚合函数。

SELECT SUM(CASE WHEN flag = 1 THEN sellcount ELSE - sellcount END),codeprogram,SUM(price) price
FROM (
    SELECT sellcount,codeprogram,price , 1 flag
    FROM sells
    WHERE date_save BETWEEN '1/21/2022' AND '2/20/2022' and usercode = 8066
    UNION ALL
    SELECT cancels,codeprogram,0 , 2
    FROM CanceliTems
    WHERE date_save BETWEEN '1/21/2022' AND '2/20/2022' and usercode = 8066
) t1
GROUP BY codeprogram