2024年1月22日 星期一

[研究]T-SQL, 如何把 FieldA 欄位相同的值,其 FieldB 欄位依小到大排序後,在 FieldC 欄位依序給予 A, B, C, D,E,F,G 等值 ?

[研究]T-SQL, 如何把 FieldA 欄位相同的值,其 FieldB 欄位依小到大排序後,在 FieldC 欄位依序給予 A, B, C, D,E,F,G 等值 ?

2024-01-22

環境:Visual Studio 2022 + ASP.NET + WebForm + Web Application + C# + SQL Server 2019 + SQL Server Management Studio (SSMS) 19

********************************************************************************

User

T-SQL, 如何把 FieldA 欄位相同的值,其 FieldB 欄位依小到大排序後,在 FieldC 欄位依序給予 A, B, C, D,E,F,G 等值 ?

ChatGPT

在 T-SQL 中,你可以使用 ROW_NUMBER() 窗口函數來實現根據 FieldA 欄位相同的值,將 FieldB 欄位按升序排序,然後根據排序的結果為每一個相同的 FieldA 賦予相應的 FieldC 值。以下是一個例子:

假設你有一個表格 YourTable,其中包含 FieldA、FieldB 和 FieldC 欄位。你希望根據 FieldA 將 FieldB 按升序排序,然後為每個相同的 FieldA 賦予 FieldC 值,可以使用如下的 T-SQL 查詢:

WITH RankedData AS (
    SELECT
        FieldA,
        FieldB,
        ROW_NUMBER() OVER (PARTITION BY FieldA ORDER BY FieldB) AS RowNum
    FROM
        YourTable
)
UPDATE RankedData
SET FieldC = CHAR(64 + RowNum); -- 將 RowNum 轉換為 A, B, C, D, ...

這個查詢中,使用 ROW_NUMBER() 函數,將每個相同的 FieldA 的行按照 FieldB 升序排序,並將排序後的行數賦予 RowNum。接著,使用 UPDATE 語句將 FieldC 設置為對應的字母值,這裡使用 CHAR(64 + RowNum) 將數字轉換為相應的大寫字母(A, B, C, ...)。

這樣,對於每個相同的 FieldA,FieldC 的值就會根據 FieldB 的升序排序被賦予 A, B, C, D, ... 的值。

(完)

相關

沒有留言:

張貼留言