我有一些记录表明他们有一个优先级字段,我想在一个记录中选择排名最高的这些记录的某些字段。如果该字段的值为null,则选择优先级较低的值。
您可以在下图中看到样本数据:橙色表是源,蓝色表是结果。
更新
CREATE TABLE MyView(Id INT ,[Priority] INT ,[F1] INT ,[F2] INT ,[F3] INT);
INSERT INTO [dbo].[MyView]
VALUES ( 15, 4, NULL, 3, 2 ),
( 20, 3, 2, 1, NULL ),
( 28, 2, NULL, 0, 9 ),
( 36, 1, 5, 1, NULL );
DROP TABLE [dbo].[MyView];
先谢谢你。
答案 0 :(得分:2)
好吧,我想不出任何有效的东西,但试试这个:
SELECT TOP 1 t.f1,
(SELECT TOP 1 s.f2 FROM YourTable s
ORDER BY CASE WHEN s.f2 IS NULL THEN 1 ELSE 0 END,
s.priority DESC) as f2,
(SELECT TOP 1 q.f3 FROM YourTable q
ORDER BY CASE WHEN q.f3 IS NULL THEN 1 ELSE 0 END,
q.priority DESC) as f3
FROM YourTable t
ORDER BY CASE WHEN t.f1 IS NULL THEN 1 ELSE 0 END,
t.priority DESC