微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

如何解决添加在 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)

希望能帮助其他人!

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?