想要在SQL Server中具有计数和重复值的记录

时间:2016-05-20 06:08:19

标签: sql sql-server

我希望从中获取具有重复值及其计数的记录,如下所示。

我正在尝试跟踪查询,但它显示错误的计数。请建议我。

我使用的查询:

SELECT  msisdn, waiver_reason, COUNT(msisdn) AS cnt
FROM    ECONSOLE_NEW 
WHERE   msisdn 
IN
( 
    SELECT  [CUSTOMER CELL NUMBER]
    FROM    SOFTCLOSURE
    INTERSECT
    SELECT  msisdn
    FROM    ECONSOLE_NEW
    GROUP   BY msisdn  
    HAVING  COUNT(msisdn) > 1
)
GROUP   BY msisdn, waiver_reason 
ORDER   BY msisdn

结果我得到:

msisdn waiver_reason cnt
------------------------
111    DD            1
111    VD            1
222    LP            1
222    VD            1
333    DDW           1
333    GG            1 
333    GQ            1

我想要的结果 ==>

msisdn  waiver_reason  cnt 
---------------------------
111     DD             2
111     VD             2
222     LP             2
222     VD             2
333     DDW            3
333     GG             3
333     GQ             3

3 个答案:

答案 0 :(得分:5)

每个msisdn, waiver_reason对似乎只有1条记录。您似乎希望每msisdn次计数,并同时返回所有msisdn, waiver_reason对。

如果是这种情况,那么您可以使用COUNT的窗口版本来获得预期结果:

select msisdn, waiver_reason, 
       count(msisdn) over (partition by msisdn) as cnt 
from ECONSOLE_NEW 
where msisdn in 
( 
   select [CUSTOMER CELL NUMBER] from SOFTCLOSURE 
   intersect 
   select msisdn 
   from ECONSOLE_NEW 
   GROUP BY msisdn
   having COUNT(msisdn)>1 
) 
order by msisdn

答案 1 :(得分:1)

cnt列与msisdn列相关。

尝试以下查询:

SELECT  msisdn,
        waiver_reason,
        (
            SELECT  SUM(cnt)
            FROM    ECONSOLE_NEW
            WHERE   msisdn = e.msisdn
        )   AS cnt
FROM    ECONSOLE_NEW AS e

WHERE   msisdn IN
        ( 
            SELECT  [CUSTOMER CELL NUMBER]
            FROM    SOFTCLOSURE
            INTERSECT
            SELECT  msisdn
            FROM    ECONSOLE_NEW
            GROUP   BY msisdn  
            HAVING  COUNT(msisdn) > 1
        )
GROUP   BY msisdn, waiver_reason 
ORDER   BY msisdn

答案 2 :(得分:1)

要执行此类计数,您最后可以使用分组,然后拥有子句作为计数条件,例如:

SELECT COLUMN_X, COUNT(COLUMN_X) 
FROM YOUR_TABLE 
GROUP BY COLUMN_X 
HAVING COUNT(COLUMN_X) > n;

它将返回 column_x 值的元组,该值在表格中重复超过 n 次。