Sql server SQL计算组的记录,然后将结果追加到表中

Sql server SQL计算组的记录,然后将结果追加到表中,sql-server,Sql Server,我有这张桌子: tbl_Trans -------------------------------- |Instrument|Trans_Type|Quantity| |----------+----------+--------| |HFT 123 |DEB |50000 | |HFT 123 |DEB |20000 | |HFT 123 |CRE |10000 | |ZGS 425 |DEB |40000 |

我有这张桌子:

tbl_Trans
--------------------------------
|Instrument|Trans_Type|Quantity|
|----------+----------+--------|
|HFT 123   |DEB       |50000   |
|HFT 123   |DEB       |20000   | 
|HFT 123   |CRE       |10000   | 
|ZGS 425   |DEB       |40000   |
|ZGS 425   |DEB       |30000   |
--------------------------------
然后,我必须根据Trans_类型列得到仪器的总量DEB表示相加,CRE表示减法

Example:
For HFT 123, Quantity=50000+20000-10000
             Quantity=60000
然后,应使用Trans_Type列中的RES将总量添加到表格中。 最终的表格应该如下所示:

--------------------------------
|Instrument|Trans_Type|Quantity|
|----------+----------+--------|
|HFT 123   |DEB       |50000   |
|HFT 123   |DEB       |20000   | 
|HFT 123   |CRE       |10000   | 
|ZGS 425   |DEB       |40000   |
|ZGS 425   |DEB       |30000   |
|HFT 123   |RES       |60000   |
|ZGS 425   |RES       |70000   |
--------------------------------
请帮忙。先谢谢你

WITH CTE
AS 
(
  SELECT Instrument,
  Trans_Type,
  CASE WHEN Trans_Type = 'DEB' THEN Quantity ELSE Quantity * -1 END AS Quantity
  FROM Table1
)
SELECT Instrument, Trans_type, Quantity FROM Table1
UNION ALL
SELECT Instrument, 'RES',
  SUM(Quantity) AS Total
FROM CTE AS c
GROUP BY Instrument

这将为您提供所需的:

| Instrument | Trans_type | Quantity |
|------------|------------|----------|
|    HFT 123 |        DEB |    50000 |
|    HFT 123 |        DEB |    20000 |
|    HFT 123 |        CRE |    10000 |
|    ZGS 425 |        DEB |    40000 |
|    ZGS 425 |        DEB |    30000 |
|    HFT 123 |        RES |    60000 |
|    ZGS 425 |        RES |    70000 |

这将为您提供所需的:

| Instrument | Trans_type | Quantity |
|------------|------------|----------|
|    HFT 123 |        DEB |    50000 |
|    HFT 123 |        DEB |    20000 |
|    HFT 123 |        CRE |    10000 |
|    ZGS 425 |        DEB |    40000 |
|    ZGS 425 |        DEB |    30000 |
|    HFT 123 |        RES |    60000 |
|    ZGS 425 |        RES |    70000 |

您可以使用分组选择获取总计,并将该选择的结果附加到表中

这将是:

insert into tbl_Trans (Instrument, Trans_Type, Quantity)
       select Instrument, 'RES', 
              sum(case Trans_Type when 'DEB' then Quantity 
                                  when 'CRE' then - 1 * Quantity)
       from tbl_Trans
       where Trans_Type in ('DEB', 'CRE')
       group by Instrument    
该表现在将具有所需的内容:

|Instrument|Trans_Type|Quantity|
--------------------------------
|HFT 123   |DEB       |50000   |
|HFT 123   |DEB       |20000   | 
|HFT 123   |CRE       |10000   | 
|ZGS 425   |DEB       |40000   |
|ZGS 425   |DEB       |30000   |
|HFT 123   |RES       |60000   |
|ZGS 425   |RES       |70000   |

您可以使用分组选择获取总计,并将该选择的结果附加到表中

这将是:

insert into tbl_Trans (Instrument, Trans_Type, Quantity)
       select Instrument, 'RES', 
              sum(case Trans_Type when 'DEB' then Quantity 
                                  when 'CRE' then - 1 * Quantity)
       from tbl_Trans
       where Trans_Type in ('DEB', 'CRE')
       group by Instrument    
该表现在将具有所需的内容:

|Instrument|Trans_Type|Quantity|
--------------------------------
|HFT 123   |DEB       |50000   |
|HFT 123   |DEB       |20000   | 
|HFT 123   |CRE       |10000   | 
|ZGS 425   |DEB       |40000   |
|ZGS 425   |DEB       |30000   |
|HFT 123   |RES       |60000   |
|ZGS 425   |RES       |70000   |
在MSSQL服务器中

--根据Trans_类型获取仪器的总量

选择仪器, 总和(IIF(交易类型='CRE',-1*数量,数量))为[总数量] 来自tbl_Trans,其中Trans_输入('DEB','CRE')) 按仪器分组

--在表中追加总数量

插入tbl_变送器(仪表、变送器类型、数量) 选择仪器, “RES”作为[Trans_Type], 金额(IIF(交易类型='CRE',-1*数量,数量))为[数量] 来自tbl_Trans 其中Trans_输入('DEB','CRE') 按仪器分组

在MSSQL服务器中

--根据Trans_类型获取仪器的总量

选择仪器, 总和(IIF(交易类型='CRE',-1*数量,数量))为[总数量] 来自tbl_Trans,其中Trans_输入('DEB','CRE')) 按仪器分组

--在表中追加总数量

插入tbl_变送器(仪表、变送器类型、数量) 选择仪器, “RES”作为[Trans_Type], 金额(IIF(交易类型='CRE',-1*数量,数量))为[数量] 来自tbl_Trans 其中Trans_输入('DEB','CRE') 按仪器分组


聪明。谢谢你这么聪明。谢谢你