当前位置: 首页 > 知识库问答 >
问题:

TSQL如何向同一组中的所有行添加相同的标识号,然后为下一组添加增量,等等

韦业
2023-03-14

如果我有一个来自CTE的输出数据集

PERIOD  FT  GROUP   DEPT    VALUE
1   Actual  KINDER  MATH    200
2   Actual  KINDER  MATH    363
3   Actual  KINDER  MATH    366
1   Budget  KINDER  MATH    457
2   Budget  KINDER  MATH    60
3   Budget  KINDER  MATH    158
1   Actual  HIGHSCH ENGLISH 456
2   Actual  HIGHSCH ENGLISH 745
3   Actual  HIGHSCH ENGLISH 125
1   Budget  HIGHSCH ENGLISH 364
2   Budget  HIGHSCH ENGLISH 158
3   Budget  HIGHSCH ENGLISH 200
6   Budget  HIGHSCH ENGLISH 502
7   Budget  HIGHSCH ENGLISH 650
1   Actual  COLL    ENGLISH 700
2   Actual  COLL    ENGLISH 540
3   Actual  COLL    ENGLISH 160
1   Budget  COLL    ENGLISH 820
2   Budget  COLL    ENGLISH 630
3   Budget  COLL    ENGLISH 800

但我想添加一列,该列将为每个组(按FT、group和Dept分组)添加一个标识符,如下所示:

PERIOD  FT  GROUP   DEPT    VALUE   GroupID 
1   Actual  KINDER  MATH    200 1   
2   Actual  KINDER  MATH    363 1   
3   Actual  KINDER  MATH    366 1   
1   Budget  KINDER  MATH    457 2   
2   Budget  KINDER  MATH    60  2   
3   Budget  KINDER  MATH    158 2   
1   Actual  HIGHSCH ENGLISH 456 3   
2   Actual  HIGHSCH ENGLISH 745 3   
3   Actual  HIGHSCH ENGLISH 125 3   
1   Budget  HIGHSCH ENGLISH 364 4   
2   Budget  HIGHSCH ENGLISH 158 4   
3   Budget  HIGHSCH ENGLISH 200 4   
1   Budget  HIGHSCH ENGLISH 502 5   
2   Budget  HIGHSCH ENGLISH 650 5   
3   Budget  HIGHSCH ENGLISH 336 5   
1   Actual  COLL    ENGLISH 700 6   
2   Actual  COLL    ENGLISH 540 6   
3   Actual  COLL    ENGLISH 160 6   
1   Budget  COLL    ENGLISH 820 7   
2   Budget  COLL    ENGLISH 630 7   
3   Budget  COLL    ENGLISH 800 7   

请问你知道怎么做吗?

编辑:我觉得这方面的东西可能有用

SELECT *, 
       CASE WHEN FT = 'Actual' THEN <something_incremental_to_do_with_row_num> OVER (PARTITION DEPT, GROUP, FT) END as GROUPID 
FROM cte

我不能在OVER子句中使用ORDER BY,因为我在2008年

共有2个答案

公羊浩阔
2023-03-14

陈,我相信你的答案已经在另一个帖子中找到了:

如何在SQL中为每个组返回增量组号

此外,您可以通过连接字段为每个组创建一个unique_id。例如,如果您想按FT、GROUP和DEPT进行分组,那么只需将它们放在一起。例如:

SELECT *, 
       CAST(FT AS VARCHAR) +
       CAST([GROUP] AS VARCHAR) +
       CAST(DEPT AS VARCHAR) AS UNIQUE_ID
FROM MYTABLE

如果您想暂时使用它来执行更复杂的查询,那么只需将其放入临时表中即可:

SELECT *, 
       CAST(FT AS VARCHAR) +
       CAST([GROUP] AS VARCHAR) +
       CAST(DEPT AS VARCHAR) AS UNIQUE_ID
INTO #MYTEMPTABLE
FROM MYTABLE

只有当您要加入的字段中有不同的数据类型时,您才需要CAST函数。最好保留它以避免任何不必要的头痛。希望这有所帮助。

尉迟默
2023-03-14

很难说没有看到查询的SQL,但我认为“row\u number()(按[某些字段]分区)”上的一个变量会给出这个结果。你调查过吗?

这个现有的问题可能会告诉您需要什么:如何在没有临时表的SQL查询中为组添加序号

 类似资料:
  • 我想给数组的每个元素添加相同的值。我的方法是使用default添加值。它与这个有一点不同,因为:我不知道如何写入数组的现有元素,而不是新元素。 输入: 提前感谢!

  • 我希望在R中自动化一个过程,这个过程以前是手工完成的,非常耗时。我想从一个数据帧向另一个数据帧中的每个唯一变量添加一系列观察结果。使用数据的示例可能会更好地说明这一点。。。 表1包含了对每种动物的大量观察,这是我想为每种动物添加一组行的表。 表2显示了应应用于每只动物的行。 最后一个表应该如下所示: 有人能给我指出正确的方向吗?优先使用tidyverse超过基本R(但不是必需的:))

  • 我有一个包含标签和输入的表单组 然而,标签显示在输入字段上方,我需要它在其旁边。我已经安装了Bootstrap4.0。 我已尝试使用class=“col-sm-2 col form label”,但也不起作用。 有什么建议吗?

  • 我有一个表,表中有一些列。两列有组合框,现在我想做的是,当用户从column1组合框中选择一些值时,根据用户选择的值,应该填充column2组合框。例如,如果用户从column1组合框中选择value1,则column2组合框将仅显示与value1对应的值。

  • 问题内容: 在使用pygame编写的图形程序中,我使用表示如下坐标的元组:(50,50)。 有时,我调用一个函数,该函数返回另一个元组,例如(3,-5),它表示坐标的变化。 将更改值添加到坐标值的最佳方法是什么。如果可以做一些坐标+ = change的工作,那将是很好的选择,但是看起来这将把两个元组简单地连接为(50,50,3,-5)之类的东西。而不是将第一个值与第一个值相加,将第二个值与第二个值

  • 我的html文件生成一个表: 如何在每次生成新行时将id分配给第一个td?