如何解决添加在 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'
,
这是我最终让它工作的方式
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 举报,一经查实,本站将立刻删除。