Sql server 2008 返回重复值的分区上的行数()

Sql server 2008 返回重复值的分区上的行数(),sql-server-2008,row-number,Sql Server 2008,Row Number,以下查询将在第一个分区集之后生成重复的行号。例如,第一组fldPK=2403和fldCIA=1我收到以下信息 2403 1 1 2403 1 2 2403 1 3 2403 1 4 在第二盘我收到 2403 2 1 2403 2 1 <-- duplicate 1 within the same partition 2403 2 2 2403 2 3 SELECT *, 1 AS f

以下查询将在第一个分区集之后生成重复的行号。例如,第一组fldPK=2403和fldCIA=1我收到以下信息

2403    1    1
2403    1    2
2403    1    3
2403    1    4
在第二盘我收到

2403    2    1
2403    2    1 <-- duplicate 1 within the same partition
2403    2    2
2403    2    3

    SELECT *, 1 AS fldBF, 
              ROW_NUMBER() OVER (PARTITION BY fldPK, fldCIA ORDER BY fldPK) AS sCount 
    INTO #tmpTable 
    FROM V_qryCSPGA 
    WHERE fldPK IN(SELECT DISTINCT thePK FROM FN_qryAllDTPK()) 

    UNION ALL   

    SELECT *, 1 AS fldBF, 
              ROW_NUMBER() OVER (PARTITION BY fldPK, fldCIA ORDER BY fldPK) AS sCount 
    FROM FN_qryCSGBA() 
    WHERE fldPK IN(SELECT DISTINCT thePK FROM FN_qryAllDTPK())
    ORDER BY fldPK, fldCIA, fldNDat; 

这将停止重复的数字。新编号是否是您真正想要的,是另一回事:

; WITH cte AS
  ( SELECT *, 1 AS fldBF
    FROM V_qryCSPGA 
    WHERE fldPK IN(SELECT DISTINCT thePK FROM FN_qryAllDTPK()) 

    UNION ALL   

    SELECT *, 1 AS fldBF
    FROM FN_qryCSGBA() 
    WHERE fldPK IN(SELECT DISTINCT thePK FROM FN_qryAllDTPK())
  )
SELECT *, 
       ROW_NUMBER() OVER (PARTITION BY fldPK, fldCIA ORDER BY fldPK) AS sCount 
INTO #tmpTable 
FROM cte 
ORDER BY fldPK, fldCIA, fldNDat; 

这将停止重复的数字。新编号是否是您真正想要的,是另一回事:

; WITH cte AS
  ( SELECT *, 1 AS fldBF
    FROM V_qryCSPGA 
    WHERE fldPK IN(SELECT DISTINCT thePK FROM FN_qryAllDTPK()) 

    UNION ALL   

    SELECT *, 1 AS fldBF
    FROM FN_qryCSGBA() 
    WHERE fldPK IN(SELECT DISTINCT thePK FROM FN_qryAllDTPK())
  )
SELECT *, 
       ROW_NUMBER() OVER (PARTITION BY fldPK, fldCIA ORDER BY fldPK) AS sCount 
INTO #tmpTable 
FROM cte 
ORDER BY fldPK, fldCIA, fldNDat; 

这将停止重复的数字。新编号是否是您真正想要的,是另一回事:

; WITH cte AS
  ( SELECT *, 1 AS fldBF
    FROM V_qryCSPGA 
    WHERE fldPK IN(SELECT DISTINCT thePK FROM FN_qryAllDTPK()) 

    UNION ALL   

    SELECT *, 1 AS fldBF
    FROM FN_qryCSGBA() 
    WHERE fldPK IN(SELECT DISTINCT thePK FROM FN_qryAllDTPK())
  )
SELECT *, 
       ROW_NUMBER() OVER (PARTITION BY fldPK, fldCIA ORDER BY fldPK) AS sCount 
INTO #tmpTable 
FROM cte 
ORDER BY fldPK, fldCIA, fldNDat; 

这将停止重复的数字。新编号是否是您真正想要的,是另一回事:

; WITH cte AS
  ( SELECT *, 1 AS fldBF
    FROM V_qryCSPGA 
    WHERE fldPK IN(SELECT DISTINCT thePK FROM FN_qryAllDTPK()) 

    UNION ALL   

    SELECT *, 1 AS fldBF
    FROM FN_qryCSGBA() 
    WHERE fldPK IN(SELECT DISTINCT thePK FROM FN_qryAllDTPK())
  )
SELECT *, 
       ROW_NUMBER() OVER (PARTITION BY fldPK, fldCIA ORDER BY fldPK) AS sCount 
INTO #tmpTable 
FROM cte 
ORDER BY fldPK, fldCIA, fldNDat; 


你有一个
联盟
,这就是原因。两个独立的计数。有点像,如果我最初创建一个空的Scont列,是否有必要进行更新?我试过了,但所有的Scont值都是1。您可以在派生表中进行并集,然后在外部查询中进行行编号()。这将为现在得到重复的行提供不同的数字(如果您需要的话)。联合的第一部分的行需要得到低数字,而第二部分的行需要得到高数字吗?不,基本上,我只是将表与union连接起来,然后从那里进行分区,并为每个fldPK和fldCIA对插入多个点的行号。您有一个
union
,这就是原因。两个独立的计数。有点像,如果我最初创建一个空的Scont列,是否有必要进行更新?我试过了,但所有的Scont值都是1。您可以在派生表中进行并集,然后在外部查询中进行行编号()。这将为现在得到重复的行提供不同的数字(如果您需要的话)。联合的第一部分的行需要得到低数字,而第二部分的行需要得到高数字吗?不,基本上,我只是将表与union连接起来,然后从那里进行分区,并为每个fldPK和fldCIA对插入多个点的行号。您有一个
union
,这就是原因。两个独立的计数。有点像,如果我最初创建一个空的Scont列,是否有必要进行更新?我试过了,但所有的Scont值都是1。您可以在派生表中进行并集,然后在外部查询中进行行编号()。这将为现在得到重复的行提供不同的数字(如果您需要的话)。联合的第一部分的行需要得到低数字,而第二部分的行需要得到高数字吗?不,基本上,我只是将表与union连接起来,然后从那里进行分区,并为每个fldPK和fldCIA对插入多个点的行号。您有一个
union
,这就是原因。两个独立的计数。有点像,如果我最初创建一个空的Scont列,是否有必要进行更新?我试过了,但所有的Scont值都是1。您可以在派生表中进行并集,然后在外部查询中进行行编号()。这将为现在得到重复的行提供不同的数字(如果您需要的话)。联合的第一部分的行需要得到低数字,而第二部分的行需要得到高数字吗?不,我基本上只是将表与union连接起来,然后从那里进行分区,并为每个fldPK和fldCIA对插入多个点的行号。