Sql server 如何根据列中包含的频率值为表中的行分配顺序值

Sql server 如何根据列中包含的频率值为表中的行分配顺序值,sql-server,Sql Server,我有这张桌子: CREATE TABLE [dbo].[Phrase] ( [PhraseId] UNIQUEIDENTIFIER DEFAULT (newid()) NOT NULL, [English] NVARCHAR (250) NOT NULL, [Kana] NVARCHAR (MAX) NULL, [Kanji] NVARCHAR (MAX) NULL, [FrequencyA]

我有这张桌子:

CREATE TABLE [dbo].[Phrase] (
    [PhraseId]     UNIQUEIDENTIFIER DEFAULT (newid()) NOT NULL,
    [English]      NVARCHAR (250)   NOT NULL,
    [Kana]         NVARCHAR (MAX)   NULL,
    [Kanji]        NVARCHAR (MAX)   NULL,
    [FrequencyA]   INT              NULL,
    [OrderA]       INT              NULL,
    PRIMARY KEY CLUSTERED ([PhraseId] ASC),
    CONSTRAINT [FK_PhrasePhraseChapter] FOREIGN KEY ([ChapterId]) REFERENCES [dbo].[PhraseChapter] ([PhraseChapterShortId])
);
Freq列包含一个从0到20000的数字

是否有一种方法可以填充[OrderA]列,以便为每一行分配一个位置。这里有一个例子来说明我的意思:

PhraseId     FrequencyA     OrderA
1            100             3   
2            50              4
3            50              5
4            201             1
5            200             2
6            10              7
7            50              6
我意识到这很难解释,所以如果问题不清楚,请提出任何问题,我会尽力澄清。请注意,对于顺序为50的行,我不关心短语2、3和7的顺序,只要其中一个显示为第4、第5和第6。我有大约15000行,所以像这样的细微差异不会产生任何影响。

您可以使用函数来获得所需的结果

在这里添加代码

SELECT PhraseId, FrequencyA, ROW_NUMBER() OVER(PARTITION BY (SELECT NULL) ORDER BY FrequencyA DESC) AS OrderA
FROM Phrase
ORDER BY PhraseId
注意:我想强调的是,colunm
PhraseId
是一个
UNIQUEIDENTIFIER
,它不会如示例中所示将数字显示为整数,而是显示
GUID

添加更新查询

;WITH PhraseUpdate
AS
(
  SELECT PhraseId, FrequencyA, ROW_NUMBER() OVER(PARTITION BY (SELECT NULL) ORDER BY FrequencyA DESC) AS OrderA
  FROM Phrase
)
UPDATE p
SET  OrderA = pu.OrderA
FROM PhraseUpdate pu
JOIN Phrase p
ON p.PhraseId = pu.PhraseId

这是围绕同一个“项目”发表的一系列文章中的另一篇(引用这些话是为了澄清疑问)。在这里询问之前,请向我们展示您确实试图解决问题的任何迹象,否则这就像您期望社区为您免费工作一样。谢谢,但我如何填充专栏?@Anne,您可以使用update语句更新专栏。