【问题标题】:SQL server : Find the Position of Row in a given Category along with Total row in that CategorySQL Server:查找给定类别中行的位置以及该类别中的总行
【发布时间】:2023-01-10 12:23:20
【问题描述】:

我在 SQL 表中有以下数据

Guid    Token   Category    DateCreated
GUID1   TK1     Category1   1/9/2023 21:50
GUID2   TK2     Category1   1/10/2023 21:51
GUID3   TK3     Category1   1/11/2023 21:52
GUID4   TK4     Category1   1/12/2023 21:53
GUID5   TK5     Category1   1/13/2023 21:54
GUID6   TK6     Category1   1/14/2023 21:55
GUID7   TK7     Category1   1/15/2023 21:56
GUID8   TK8     Category1   1/16/2023 21:57
GUID9   TK9     Category1   1/17/2023 21:58
GUID10  TK10    Category1   1/18/2023 21:59
GUID11  TK11    Category1   1/19/2023 22:00
GUID12  TK12    Category2   1/20/2023 22:01
GUID13  TK13    Category2   1/21/2023 22:02
GUID14  TK14    Category2   1/22/2023 22:03
GUID15  TK15    Category2   1/23/2023 22:04
GUID16  TK16    Category3   1/24/2023 22:05
GUID17  TK17    Category3   1/25/2023 22:06
GUID18  TK18    Category3   1/26/2023 22:07
GUID19  TK19    Category3   1/27/2023 22:08

我想得到如下所示的结果。 (获取 Token 在其类别中的位置和该类别中的 Token 总数)

Token   Position#   OutOftotal (Where Category ='Category1' and Token='TK8')
TK8         8           11

Token   Position#   OutOftotal (Where Category ='Category2' and Token='TK5')
TK5         5           11

Token   Position#   OutOftotal (Where Category ='Category3' and Token='TK13')
TK13        2           4

【问题讨论】:

  • 你试过什么?
  • 有 11 行“类别 1”,但其中只有 1 行具有标记 =“TK8”- OutOfTotal o=11 怎么可能?只有 4 行带有“Category2”,那怎么会是 OutOfTotal = 11?请重新考虑预期结果以及您如何描述预期结果。
  • 假设有错字。在您想要的结果中,Category2 应该是 Category1,Category3 应该是 Category2

标签: sql-server


【解决方案1】:

这是一个使用窗口函数的选项sum() over()

with cte as (
Select *
      ,[Position]   = sum(1) over (partition by Category order by [DateCreated])
      ,[OutofTotal] = sum(1) over (partition by Category)
 From  YourTable
 Where Category ='Category1' -- Optional but STRONGLY suggested
)
Select [Token]   
      ,[Position] 
      ,[OutofTotal]
 From cte 
 Where Category ='Category1' 
   and Token='TK8' 

结果

Token   Position    OutofTotal
TK8     8           11

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-12-14
    • 2023-03-06
    • 1970-01-01
    • 2018-11-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多