Sql server 2008 按值为每组指定一个序列号
我有一个临时表,有许多行TümDATA。我使用GROUPBY子句将其行插入另一个临时表GrupTOT。但是我被困在这里了,我需要在分组后给行一个序列号 以下是我的SQL:Sql server 2008 按值为每组指定一个序列号,sql-server-2008,group-by,Sql Server 2008,Group By,我有一个临时表,有许多行TümDATA。我使用GROUPBY子句将其行插入另一个临时表GrupTOT。但是我被困在这里了,我需要在分组后给行一个序列号 以下是我的SQL: INSERT INTO #GrupTOT(AY, BLK, DRE, TOT) SELECT J.AY, J.BLK, J.DRE, SUM(J.BORÇ) FROM #TümDATA J GROUP BY J.AY, J.BLK, J.DRE 您可以使用ROW_NUMBER根据订单获得编号。或者,如果需要的话,也可以
INSERT INTO #GrupTOT(AY, BLK, DRE, TOT)
SELECT J.AY, J.BLK, J.DRE, SUM(J.BORÇ)
FROM #TümDATA J
GROUP BY J.AY, J.BLK, J.DRE
您可以使用ROW_NUMBER根据订单获得编号。或者,如果需要的话,也可以在insert中添加一列以自动递增数字
行数方法:
WITH CTE AS
(
SELECT Col1, Col2, Col3, Count(*) as [COUNT]
FROM dbo.Table1
GROUP BY Col1, Col2, Col3
)
INSERT INTO dbo.Table2
SELECT RowNum = ROW_NUMBER() OVER ( ORDER BY Col1, Col2, Col3, [COUNT] DESC ),
Col1, Col2, Col3, [COUNT]
FROM CTE
试试这个:在Oracle中工作
WITH ORDERS
AS (SELECT
TO_DATE ( '2013-09-18 00:00:01',
'YYYY-MM-DD HH24:MI:SS' )
AS THE_DATE,
'John' AS NAME
FROM
DUAL
UNION ALL
SELECT
TO_DATE ( '2013-09-19 00:00:01',
'YYYY-MM-DD HH24:MI:SS' )
AS THE_DATE,
'James' AS NAME
FROM
DUAL
UNION ALL
SELECT
TO_DATE ( '2013-09-20 00:00:01',
'YYYY-MM-DD HH24:MI:SS' )
AS THE_DATE,
'John' AS NAME
FROM
DUAL
UNION ALL
SELECT
TO_DATE ( '2013-09-20 00:00:02',
'YYYY-MM-DD HH24:MI:SS' )
AS THE_DATE,
'John' AS NAME
FROM
DUAL
UNION ALL
SELECT
TO_DATE ( '2013-09-20 00:00:03',
'YYYY-MM-DD HH24:MI:SS' )
AS THE_DATE,
'John' AS NAME
FROM
DUAL
UNION ALL
SELECT
TO_DATE ( '2013-09-20 00:00:04',
'YYYY-MM-DD HH24:MI:SS' )
AS THE_DATE,
'John' AS NAME
FROM
DUAL
UNION ALL
SELECT
TO_DATE ( '2013-09-21 16:00:01',
'YYYY-MM-DD HH24:MI:SS' )
AS THE_DATE,
'Jennifer' AS NAME
FROM
DUAL)
SELECT
THE_DATE,
NAME,
ROWNUM
FROM
(SELECT
TRUNC ( THE_DATE ) THE_DATE,
NAME,
COUNT ( 1 )
FROM
ORDERS
GROUP BY
TRUNC ( THE_DATE ),
NAME);
原始数据:
9/18/2013 12:00:01 AM John
9/19/2013 12:00:01 AM James
9/20/2013 12:00:01 AM John
9/20/2013 12:00:02 AM John
9/20/2013 12:00:03 AM John
9/20/2013 12:00:04 AM John
9/21/2013 4:00:01 PM Jennifer
结果:
9/21/2013 Jennifer 1
9/19/2013 James 2
9/20/2013 John 3
9/18/2013 John 4
您可以使用该函数
例如
您可以尝试使用标识列进行选择。这将创建新的临时表GrupTOT
这是一本书
向我们展示您当前使用的sql,请在此处使用;插入GrupTOTAY,BLK,DRE,TOT选择J.AY,J.BLK,J.DRE,SUMJ.BORÇ由J.AY,J.BLK,J.DRE从TümDATA J组中选择J.AY,J.BLK,J.DRE将示例SQL移动到问题中,并根据提供的SQLTanner,thnx更新我的答案,以移动HI Kaf,thnx您的答案。这适用于我的sp。您能回答其他问题吗?如果序列值起始值来自另一个表,您的解决方案是什么?您是指序列号起始值作为变量吗?是的,值来自另一个表列表C。声明一个变量并首先将该值分配给它,然后将其与行数函数一起使用。嗨,Tim,感谢您的快速回答。是否有从另一个表C中启动数值的解决方案/方法?什么是从另一个表中启动数值?您可以选择该值并将其添加到行号(如果需要)。Thnx表示答复,但Kaf的答案对我来说是最佳解决方案。Thnx表示答复,但Kaf的答案对我来说是最佳解决方案。
WITH q AS (
SELECT field_a
FROM SomeTable
GROUP BY field_a
)
SELECT ROW_NUMBER() OVER(ORDER BY field_a) AS row_num,
field_a
FROM q
SELECT SeqNo = identity(int,1,1), --Identity column
AY = J.AY
BLK = J.BLK,
DRE = J.DRE,
TOT = SUM(J.BORÇ)
INTO #GrupTOT
FROM #TümDATA J
GROUP BY J.AY, J.BLK, J.DRE;
--SELECT * FROM #GrupTOT