【问题标题】:How to return records grouped by column A having different values in column B如何返回按 A 列分组的记录在 B 列中具有不同的值
【发布时间】:2015-04-24 02:55:31
【问题描述】:

请原谅标题,但这是我在表 #RISK 中的内容

ACCT_NUM  RISK
1234       5
007       10
007        1
37947      3

我希望输出为 -

ACCT_NUM  RISK
007        10
007        1

这是我尝试过的-

;WITH C AS(
    SELECT ROW_NUMBER() OVER (PARTITION BY ACCT_NUM ORDER BY ACCT_NUM, RISK) AS Rn
           ,ACCT_NUM, RISK
    FROM #RISK 
    WHERE NOT EXISTS(
    SELECT ACCT_NUM,RISK FROM #RISK GROUP BY ACCT_NUM,RISK)

)
SELECT *
FROM C

但是我的查询没有返回任何结果。我做错了什么?

【问题讨论】:

    标签: sql-server sql-server-2008 select group-by common-table-expression


    【解决方案1】:

    我们也可以通过使用count和Row_number函数来实现这个结果

    declare @t table (AcctNum varchar(10),risk int)
    insert into @t(AcctNum,risk)values
    ('1234',5),
    ('007',10),
    ('007',1),
    ('37947',3)
    
    
    ;with cte as (
    select AcctNum,risk,COUNT(AcctNum)OVER(PARTITION BY AcctNum )RN from @t )
    select AcctNum,risk from cte WHERE RN = 2
    

    【讨论】:

      【解决方案2】:

      这是你想要的吗?

      select acct_num, risk
      from (select r.*,
                   min(risk) over (partition by acct_num) over minrisk,
                   max(risk) over (partition by acct_num) over maxrisk
            from #risk r
           ) r
      where minrisk <> maxrisk;
      

      【讨论】:

        【解决方案3】:

        这可能有帮助

        SELECT ACCT_NUM,RISK FROM #RISK
        where ACCT_NUM=(
        SELECT ACCT_NUM FROM #RISK
        GROUP BY ACCT_NUM 
        HAVING COUNT(*)>1)
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2015-12-04
          • 1970-01-01
          • 2021-01-25
          • 2015-12-15
          • 1970-01-01
          • 1970-01-01
          • 2023-01-11
          相关资源
          最近更新 更多