簡體   English   中英

如何為組合系列中的每個元素添加增量數字?

[英]How can I add an incremental number to each element in a grouped series?

我遇到一個名為Group的表和名為Entry的表的問題。 Group表具有主鍵Id Entry表具有一個主鍵Id ,這是GroupId的外鍵,稱為GroupId Entry表中還有一列Weight 這個權Weight是一個整數,它所要做的就是告訴我排序權重,頂部顯示零。

基本上發生了什么事,有人在設計數據庫時使這個Weight字段可為空。 現在,我需要遍歷並調整權Weight以適應我們打算添加的UNIQUE約束: UNQIUE(GroupId, Weight)Entry表。 當兩個Entry條目基本上位於同一組中時,這可以防止它們具有相同的排序權重。

什么查詢將讓我去通過我們現有的數據,只是人數的Weight在每個條目上逐組基礎上從0到N列,其中N是多少Entry條目在一個Group 我想根據EntryId設置權重,以便給定Group Entry的最低Id獲得最低的Weight

我想要一個大型查詢,該查詢將通過Group表,將所有Entry條目合並在一起,然后遍歷它們並分配順序。 但是,我不知道從哪里開始。

本質上,您將使用MS SQL Over子句

這是一個sqlfiddle示例,向您展示如何在一個查詢中進行操作

希望這可以幫助。

CREATE TABLE Entry (Id INT PRIMARY KEY, GroupId INT, Weight INT);

CREATE TABLE [Group] (Id INT PRIMARY KEY, Label VARCHAR(10));

INSERT [Group] (Id, Label)
VALUES(1, 'test');


INSERT Entry (Id, GroupId, Weight)
VALUES(1,1, null)

INSERT Entry (Id, GroupId, Weight)
VALUES(2,1, null)

INSERT Entry (Id, GroupId, Weight)
VALUES(3,1, null)

UPDATE E
  SET E.WEIGHT = o.WEIGHTIS
--SELECT *
FROM Entry E
INNER JOIN (
    SELECT G.Id GID, E.Id EID, 
     ROW_NUMBER() OVER(PARTITION BY G.Id ORDER BY E.ID) WeightIs
    FROM [Group] G
    INNER JOIN Entry E
      ON G.Id = E.GroupId  
) o
ON o.GID = E.GroupID AND o.EID = E.Id

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM