-1

如果我有一个来自 CTE 的输出数据集,看起来像

期间 FT 集团部门价值
1 实际 KINDER MATH 200
2 实际金德数学 363
3 实际金德数学 366
1 预算金德数学 457
2 预算 KINDER MATH 60
3 预算金德数学 158
1 实际 HIGHSCH 英语 456
2 实际 HIGHSCH 英语 745
3 实际 HIGHSCH 英语 125
1 预算 HIGHSCH 英语 364
2 预算 HIGHSCH 英语 158
3 预算 HIGHSCH 英语 200
6 预算 HIGHSCH 英语 502
7 预算 HIGHSCH 英语 650
1 实际 COLL ENGLISH 700
2 实际 COLL ENGLISH 540
3 实际 COLL ENGLISH 160
1 预算 COLL 英语 820
2 预算 COLL 英语 630
3 预算 COLL 英语 800

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

期间 FT 组部门值 GroupID
1 实际 KINDER MATH 200 1   
2 实际 KINDER MATH 363 1   
3 实际 KINDER MATH 366 1   
1 预算 KINDER MATH 457 2   
2 预算 KINDER MATH 60 2   
3 预算金德数学 158 2   
1 实际 HIGHSCH 英语 456 3   
2 实际 HIGHSCH 英语 745 3   
3 实际 HIGHSCH 英语 125 3   
1 预算 HIGHSCH 英语 364 4   
2 预算 HIGHSCH 英语 158 4   
3 预算 HIGHSCH 英语 200 4   
1 预算 HIGHSCH 英语 502 5   
2 预算 HIGHSCH 英语 650 5   
3 预算 HIGHSCH 英语 336 5   
1 实际 COLL ENGLISH 700 6   
2 实际 COLL 英语 540 6   
3 实际 COLL 英语 160 6   
1 预算 COLL 英语 820 7   
2 预算 COLL 英语 630 7   
3 预算 COLL 英语 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 年

4

2 回答 2

0

如果没有看到查询的 SQL,很难说,但我认为“row_number()(按 [某些字段] 分区)”的变体会给你这个。你调查过吗?

这个现有的问题可能会给你你需要的东西: How to add sequence number for groups in a SQL query without temp tables

于 2013-10-30T14:27:44.970 回答
0

陈,我相信您的答案已经在另一个线程中可用:

如何在 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 函数。最好保留它以避免任何不必要的头痛。希望这可以帮助。

于 2013-10-30T17:11:35.400 回答