按两列分组但显示表中的更多数据 - 支付问题

时间:2011-12-01 19:42:50

标签: sql sql-server-2005 group-by duplicate-removal

这是我解决支付问题的一部分问题。这个是第四个,希望是最后一个。

我有客户表,我只从它获取大约10个字段。问题是,它包含重复项。不是整行是重复的,而是我识别包含重复的记录的两个字段(尽管只有少数)。这两个领域是

  1. ACCOUNT_NUMBER
  2. 供应商
  3. 我的测试表看起来像这样

    id  account_no  supplier   customer_name        meter_no  StartDate    EndDate       EnrollDate    active      account_type usage*   repid 
    --- ----------- ---------- -------------------- --------- ------------ ------------- ------------- ----------- ------------ -------- ------
    1   1000        MOBIL      photo company        345       11/01/2011   12/01/2011    09/01/2011    active      cat2         2000     100   
    2   1000        MOBIL      photo company        145       11/05/2011   12/04/2011    09/15/2011    active      cat3         2000     100   
    3   1000        MOBIL      photo company        645       11/05/2010   12/04/2010    08/25/2010    inactive    cat2         1000     100   
    4   1001        HESS       Adventure company    485       11/01/2011   12/01/2011    09/01/2011    active      cat2         1500     200   
    5   1002        SHELL      School company       678       11/05/2011   12/04/2011    09/15/2011    active      cat2         3000     100   
    6   1003        BP         Hospital company     595       11/05/2010   12/04/2010    08/25/2010    inactive    cat2         5000     300  
    

    请注意,帐号1,2和3是重复的,因为它们具有相同的Account_no和Supplier。虽然其他领域不同,但这意味着真正意义上并不重复。例如,所有这三个帐户都是不同的meter_number。

    每条记录都分配给一个代表(最后一列)。 Reps是根据加入此表与另一个来自外部的表支付的。我们仅基于Account_no和Supplier这两列进行匹配。如果他们匹配我们说好,我们有钱给你,代表得到报酬。这里的问题是当我加入表格时,您可以看到相同的account_no和供应商出现两次某些记录。那些需要删除。

    那究竟是什么问题呢?报告完成后,我们还希望打印account_no和Supplier以外的数据。这个数据包括customer_name,start_date,end_date,usage等。如果我按所有列分组,它就不会删除重复项。我想要做的是只分组两列并显示其他数据。典型的输出就像这样

    id  account_no  supplier   customer_name        meter_no  StartDate    EndDate       EnrollDate    active      account_type usage*   repid 
    --- ----------- ---------- -------------------- --------- ------------ ------------- ------------- ----------- ------------ -------- ------
    1   1000        MOBIL      photo company        345       *            *             *             *           *            4000     100   
    4   1001        HESS       Adventure company    485       11/01/2011   12/01/2011    09/01/2011    active      cat2         1500     200   
    5   1002        SHELL      School company       678       11/05/2011   12/04/2011    09/15/2011    active      cat2         3000     100   
    6   1003        BP         Hospital company     595       11/05/2010   12/04/2010    08/25/2010    inactive    cat2         5000     300   
    

    上表实际上是我的看法。它将摆脱所有重复的account_no和供应商,但其他字段会发生什么,尤其是如果该组的值在该组中不相同?我对一个或另一个值感到满意。这里没有严格的标准,因为这些重复的内容很少。 *表示任何数据都没有问题,但它应该属于一个或另一个或两个记录的总和。

    创建此表的一种想法是在上表中添加一个附加列,并列出在该组中找到的记录数。

    如有任何疑问,请询问。注意重要的列是用法,我希望得到该组的用法总和。但如果不是组中的最高值也可以。

    我不确定这是否可以在SQL查询中完成。可能会有办法。

1 个答案:

答案 0 :(得分:0)

如果您使用一个值或另一个值,您可以使用分组的选择使用Min()或Max()函数,您将得到一个或另一个。

select a, b, min(y), max(z) from table group by a, b