【问题标题】:row_number() Group by?row_number() 分组依据?
【发布时间】:2012-09-13 04:12:49
【问题描述】:

我有一个包含DateCatQTY 列的数据集。我想要做的是添加一个唯一的列,当它计算行数时,它只计算唯一的Cat 值。这就是我希望我的结果集看起来的样子:

通过使用下面的 SQL 查询,我可以使用 row_number() 函数获取行。

但是,我无法获得上面描述的那个独特的列。当我将 group by 添加到 OVER 子句时,它不起作用。有人对我如何让这个唯一计数列起作用有任何想法吗?

SELECT 
   Date,    
   ROW_NUMBER() OVER (PARTITION BY Date ORDER By Date, Cat) as ROW,
   Cat,
   Qty
FROM SOURCE

【问题讨论】:

    标签: sql-server tsql unique row-number


    【解决方案1】:

    这里有一个解决方案。

    您不必担心 Cat 的排序。使用以下 SQL,您将能够获得日期和猫组合的唯一值。

    SELECT 
       Date,    
       ROW_NUMBER() OVER (PARTITION BY Date, Cat ORDER By Date, Cat) as ROW,
       Cat,
       Qty
    FROM SOURCE
    

    【讨论】:

      【解决方案2】:
      DENSE_RANK() OVER (PARTITION BY date ORDER BY cat)
      

      【讨论】:

      • 谢谢,这是朝着正确方向迈出的一步。然而,事实是我的实际数据集不是按猫排序的。你知道它在那个例子中是如何工作的吗? (想象一下,在我的 cat 列中,DEF 在 ABC 之前。但确实,DEF 值在我的排序中都是连续的,所以你不会在 cat 列中看到 DEF、DEF、ABC、ABC、DEF 作为值)
      • @user1582928 根据msdn.microsoft.com/en-us/library/ms173825.aspx 确定将 DENSE_RANK 函数应用于分区中的行的顺序”。并且您可以随时在 SELECT 末尾添加 ORDER BY。
      • @user1582928,如果你想你可以指定一个函数来改变顺序,例如:order by decode('DEF',1,'ABC',2,3)
      猜你喜欢
      • 2021-09-16
      • 1970-01-01
      • 2011-09-24
      • 2020-01-17
      • 1970-01-01
      • 1970-01-01
      • 2021-02-11
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多