根据以前的记录对Concat列进行分组

时间:2014-12-20 23:28:36

标签: mysql stored-procedures group-concat

我在下一份报告中遇到了一个相当困难的问题。我有一些线索,但似乎无法将其包装在正确的查询中。我尝试使用Group_Concat而不是Concat个数字,但我没有得到预期的结果。

  

完全所有权永久产权 Usufruct (Google翻译这些条款)交换份额

  1. A 以完全所有权购买100股,数字1 - 100
  2. A 出售20股的全部所有权(FO),编号81 - 100
  3. A 购买20股永久业权(FH),数字81 - 100
  4. B 购买20股的Usufruct(US),数字81 - 100
  5. A 购买100股的全部所有权(FO),编号201 - 300
  6. 这些交易后的情况:

    • A :全资所有权180股,数字1-80&数字201 - 300
    • A :Freehold的20股,编号81 - 100
    • B :Usufruct 20股,数字81 - 100

    - 在数据库中,这些交易将存储为:

    +----+-------------+-----------+------------+------------+------------+------+
    | ID | Shareholder | Quantity  | IsPurchase | NumberFrom | NumberTill | Type |
    +----+-------------+-----------+------------+------------+------------+------+
    | 1  | Person A    | 100       | true       | 1          | 100        | FO   |
    | 2  | Person A    | 20        | false      | 81         | 100        | FO   | 
    | 3  | Person A    | 20        | true       | 81         | 100        | FH   | 
    | 4  | Person B    | 20        | true       | 81         | 100        | US   | 
    | 5  | Person A    | 100       | true       | 201        | 300        | FO   |
    +----+-------------+-----------+------------+------------+------------+------+
    

    - >我的查询所需的输出如下:

    +-------------+-----------+-----------+-----------+----------------+------------+------------+
    | Shareholder | Shares_FO | Shares_FH | Shares_US | Numbers_FO     | Numbers_FH | Numbers_Us |
    +-------------+-----------+-----------+-----------+----------------+------------+------------+
    | Person A    | 180       | 20        |           | '1,80;201,300' | '81,100'   |            |
    | Person B    |           |           | 20        |                |            | '81,100'   |
    +-------------+-----------+-----------+-----------+----------------+------------+------------+
    

    到目前为止我所拥有的是除了股票号码之外的所有内容。我在CASE WHEN列上使用TypeSUM分配到FO,FH和US列中。当IsPurchase为false时,我减去共享的数量。所以这一切都有效。我只缺少最后三列。

    求和的代码片段。

    SELECT Shareholder,
        SUM(CASE WHEN Type = 'FO' THEN 
                CASE WHEN IsPurchase THEN Quantity ELSE -Quantity END
            END) AS Shares_FO,
        SUM(CASE WHEN SRI_ID = 'FH' THEN 
                CASE WHEN IsPurchase THEN Quantity ELSE -Quantity END
            END) AS Shares_FH,
        SUM(CASE WHEN SRI_ID = 'US' THEN 
                CASE WHEN IsPurchase THEN Quantity ELSE -Quantity END
            END) AS Shares_US
    

    非常感谢提前!

0 个答案:

没有答案