【问题标题】:Combine Two Tables with SUM sql [closed]用 SUM sql 组合两个表 [关闭]
【发布时间】:2014-05-26 23:30:43
【问题描述】:

我有两个表,一个是 INqty,另一个是 OUTqty,我已经尝试并浏览了答案,但是当我执行示例查询或某些东西时,我总是得到 Duplicate SUM。

Table - INqty                      Table - OUTqty
|ID    |      quantity |           |   ID     |   quantity |
|001   |       30      |           |   001    |    10      |
|002   |       20      |           |   002    |    10      |
|001   |       10      |
|003   |       25      |

我需要这样的结果。

|ID    |     Quantity IN |  Quantity OUT  |
|001   |     40          |     10         |
|002   |     20          |     10         |
|003   |     25          |     NULL       |

它与 mysql 我正在使用图像中的 sql,现在我需要这个结果来分组和求和。

    SELECT Mat_ST_IN_Sifra as IDs , SUM(Mat_ST_IN_Kol) as QTYIN , '' as QTYOUT FROM mat_stavki_in GROUP BY Mat_ST_IN_Sifra
UNION all 
SELECT Mat_Stavki_Out_Sifra, '' , sum(Mat_Stavki_Out_Kolicina) FROM mat_stavki_out GROUP BY Mat_Stavki_Out_Sifra

我明白了, 感谢所有试图帮助我的人

最后我的问题的简单答案

 SELECT  a.IDs, sum(a.QTYIN),sum(a.QTYOUT) 
    FROM
    (
    SELECT Mat_ST_IN_Sifra as IDs , SUM(Mat_ST_IN_Kol) as QTYIN , '' as QTYOUT FROM mat_stavki_in GROUP BY Mat_ST_IN_Sifra
    UNION all 
    SELECT Mat_Stavki_Out_Sifra, '' , sum(Mat_Stavki_Out_Kolicina) FROM mat_stavki_out GROUP BY Mat_Stavki_Out_Sifra
    ) as A
    GROUP BY a.IDs 

【问题讨论】:

  • 向我们展示您正在处理的查询。
  • 哪个数据库 - mysql、sql server 或 ms-access ?
  • 你需要一个主键
  • Databade 是 Mysql ,现在显示 Workin Query

标签: mysql sql sql-server ms-access


【解决方案1】:

考虑以下...

DROP TABLE IF EXISTS in_qty;

CREATE TABLE in_qty
(id INT NOT NULL AUTO_INCREMENT PRIMARY KEY, account INT NOT NULL ,quantity INT NOT NULL);
INSERT INTO in_qty (account,quantity) VALUES
(1,30),
(2,20),
(1,10),
(3,25);

DROP TABLE IF EXISTS out_qty;

CREATE TABLE out_qty
(ID  INT NOT NULL AUTO_INCREMENT PRIMARY KEY  ,account INT NOT NULL,quantity INT NOT NULL);
INSERT INTO out_qty (account,quantity) VALUES
(1,10),(2,10);


SELECT account
     , SUM(CASE WHEN status = 'in' THEN quantity END) `in`
     , SUM(CASE WHEN status = 'out' THEN quantity END) `out`
  FROM 
     ( SELECT *,'in' status FROM in_qty
       UNION ALL
       SELECT *,'out' FROM out_qty
     ) x
 GROUP
    BY account;

+---------+------+------+
| account | in   | out  |
+---------+------+------+
|       1 |   40 |   10 |
|       2 |   20 |   10 |
|       3 |   25 | NULL |
+---------+------+------+

【讨论】:

  • 您好,我无法在 sql server 上执行。错误之一 - 关键字“IF”附近的语法不正确。
  • 我的答案是 mysql - 因为 OP 用那个标记了他们的问题......以及其他所有内容
【解决方案2】:

试试这个查询 -

select s1.id, s1.Qin, s2.id, s2.Qout
from
(
select p.id, sum(p.qty) as Qin
from INqty as p
group by p.id
) as s1
full outer join
(
select q.id, sum(q.qty) as Qout
from OUTqty as q
group by q.id
)as s2
on s1.id = s2.id

这是为 sql server 创建示例表的查询(根据您的问题):

CREATE TABLE [dbo].[OUTqty](
    [id] [varchar](50) NULL,
    [qty] [int] NULL
) ON [PRIMARY]
GO
INSERT [dbo].[OUTqty] ([id], [qty]) VALUES (N'001', 10)
INSERT [dbo].[OUTqty] ([id], [qty]) VALUES (N'002', 10)
GO
CREATE TABLE [dbo].[INqty](
    [id] [varchar](50) NULL,
    [qty] [int] NULL
) ON [PRIMARY]
GO
INSERT [dbo].[INqty] ([id], [qty]) VALUES (N'001', 30)
INSERT [dbo].[INqty] ([id], [qty]) VALUES (N'002', 20)
INSERT [dbo].[INqty] ([id], [qty]) VALUES (N'001', 10)
INSERT [dbo].[INqty] ([id], [qty]) VALUES (N'003', 25)

【讨论】:

  • 以下是不可能的可能有操作原因......但是如果有一个'out',没有相应的'in'呢?
猜你喜欢
  • 2022-06-13
  • 1970-01-01
  • 2014-07-31
  • 1970-01-01
  • 2018-02-02
  • 1970-01-01
  • 2021-12-19
  • 1970-01-01
  • 2021-02-03
相关资源
最近更新 更多