添加在 Order By 之后标记第一行的字段

问题描述

我有一个看起来有点像这样的 Select 语句(这里缩短,因为它只是从现有表中选择字段,没有什么过于复杂的)

 SELECT  
    CASE 
        WHEN dbo.Account_Inventory.NUMBER IS NULL THEN 'C' + CAST(CAST(dbo.Account_Inventory.CUST_ID AS bigint) AS nvarchar) 
        WHEN dbo.Account_Inventory.CUST_ID IS NULL THEN 'A' + CAST(CAST(dbo.Account_Inventory.ACCT_NUM AS bigint) AS nvarchar) 
        ELSE 'M' + CAST(CAST(dbo.Account_Inventory.NUMBER AS bigint) AS varchar) 
    END AS ID,CASE... 
    
...FROM     
    dbo.Account_Inventory LEFT OUTER JOIN dbo.Dorm ON dbo.Account_Inventory.ACCT_NUM = dbo.Dorm.ACCT_NUM
WHERE  
    (dbo.Account_Inventory.ACCT_CLOSE_DT IS NULL) AND 
    (CASE 
        WHEN dbo.Account_Inventory.XYZ = 'Yes' AND dbo.Account_Inventory.BUS_LINE_CDE IN ('BB','BBM','ABC','ABCD') THEN 'ABC' 
        WHEN dbo.Account_Inventory.XYZ = 'YES' THEN 'EFG' 
        ELSE dbo.Account_Inventory.GLOBAL_BUSInesS 
    END IN ('BIG','SMAL','ABC')) 
ORDER BY 
    Order By
         ID,dbo.Account_Inventory.INT_DAILY_RATE DESC 

在此之后,我想添加一个字段,该字段将标记第一条记录(ID 字段)并将其标记为“唯一”,将其他记录标记为“na”。

感谢任何帮助!

解决方法

您可以使用 case 语句。

case when row_number() over (order by ID,Rate desc) =1 then 'Unique' else 'na'  

enter image description here

,

这是我最终让它工作的方式

WITH "temp_results" AS (SELECT  

CASE 
        WHEN dbo.Account_Inventory.NUMBER IS NULL THEN 'C' + CAST(CAST(dbo.Account_Inventory.CUST_ID AS bigint) AS nvarchar) 
        WHEN dbo.Account_Inventory.CUST_ID IS NULL THEN 'A' + CAST(CAST(dbo.Account_Inventory.ACCT_NUM AS bigint) AS nvarchar) 
        ELSE 'M' + CAST(CAST(dbo.Account_Inventory.NUMBER AS bigint) AS varchar) 
    END AS ID,CASE... 

*MORE CASE STATEMENTS*
    
...FROM     
    dbo.Account_Inventory LEFT OUTER JOIN dbo.Dorm ON dbo.Account_Inventory.ACCT_NUM = dbo.Dorm.ACCT_NUM
WHERE  
    (dbo.Account_Inventory.ACCT_CLOSE_DT IS NULL) AND 
    (CASE 
        WHEN dbo.Account_Inventory.XYZ = 'Yes' AND dbo.Account_Inventory.BUS_LINE_CDE IN ('BB','BBM','ABC','ABCD') THEN 'ABC' 
        WHEN dbo.Account_Inventory.XYZ = 'YES' THEN 'EFG' 
        ELSE dbo.Account_Inventory.GLOBAL_BUSINESS 
    END IN ('BIG','SMAL','ABC')) 
ORDER BY
         ID,dbo.Account_Inventory.INT_DAILY_RATE DESC OFFSET 0 ROWS)

SELECT "Rel ID","Rel_Name"...

*LIST ALL FIELDS*

...(CASE WHEN ROW_NUMBER() OVER 
(PARTITION BY "Rel_ID" ORDER BY Rel_ID,INT_DAILY_RATE desc)=1 THEN 'Unique' ELSE 'na' END) AS "Unique_Rel_Flag" FROM "temp_results"

我坚持最久的是用“OFFSET 0 ROWS”结束第一个 Order By 语句。没有它就行不通。

ORDER BY
         ID,dbo.Account_Inventory.INT_DAILY_RATE DESC OFFSET 0 ROWS)

希望能帮助其他人!

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...