【问题标题】:i have two table a and b. compuny name,productname same . how can i jon我有两个表a和b。公司名称,产品名称相同。我怎么能乔恩
【发布时间】:2021-08-19 07:57:55
【问题描述】:
table_a
.........................................
cmp_name    pro_name    purchase
a                 x1        5
a                 x2        7
b                 p1        8
a                  x1       8
b                  p2       12
b                  p1       6
a                 x1        3


table_b
.........................................
cmp_name    pro_name    sale
a                 x1        3
a                 x2        1
b                 p1        4
a                 x1        3
b                 p2        2
b                 p1        4
a                 x1        1


result
.........................................
cmp_name    pro_name    Total_pur   Total_sale      stock
a                  x1       16              7        9
a                  x2       7               1        6
b                  p1       14              8        6
b                  p2       12               2       10

我该怎么做

【问题讨论】:

  • 能否请您研究一下`left join`?

标签: sql sql-server-2008


【解决方案1】:

试试下面的查询,但是你必须有更好的设计来解决这个问题

SELECT 
    table_a.cmp_name,
    table_a.pro_name c,
    (SELECT 
            SUM(table_a.purchase)
        FROM
            table_a
        WHERE
            table_a.pro_name = c) AS Total_pur,
    (SELECT 
            SUM(table_b.sale)
        FROM
            table_b
        WHERE
            table_b.pro_name = c) AS Total_sale,
    ((SELECT 
            SUM(table_a.purchase)
        FROM
            table_a
        WHERE
            table_a.pro_name = c) - (SELECT 
            SUM(table_b.sale)
        FROM
            table_b
        WHERE
            table_b.pro_name = c)) AS stock
FROM
    table_a
        LEFT JOIN
    table_b ON table_a.cmp_name = table_b.cmp_name
GROUP BY table_a.cmp_name , table_a.pro_name

【讨论】:

  • 请避免在查询中使用旧式联接
  • 对,我改了加入方式谢谢
  • 对不起,这个查询的结果不正确
  • 检查新查询,我已经更改了
  • 非常感谢。能够加入这样一个美丽的平台真是太好了。
【解决方案2】:

您需要通过cmp_namepro_namepurchasesale 表执行分组。这是通过cmp_namepro_name 获得总购买和销售

之后使用purchaseLEFT JOINsale 表。 (因为您可能有已购买但未出售的商品)

select a.cmp_name, 
       a.pro_name, 
       a.purchase, 
       b.sale, 
       stock = a.purchase - isnull(b.sale, 0)
from   (
           select cmp_name, pro_name, purchase = sum(purchase)
           from   table_a
           group by cmp_name, pro_name
       ) a
       left join 
       (
           select cmp_name, pro_name, sale = sum(sale)
           from   table_b 
           group by cmp_name, pro_name
       ) b                  on  a.cmp_name = b.cmp_name
                            and a.pro_name = b.pro_name
order by a.cmp_name, a.pro_name

demo

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-05-07
    • 1970-01-01
    • 2013-12-04
    • 1970-01-01
    • 1970-01-01
    • 2020-11-01
    • 1970-01-01
    相关资源
    最近更新 更多