如何在SQL Server中使用不同的选定字段转换一行中的多行

时间:2016-06-14 13:12:54

标签: sql sql-server select

我有一些记录表明他们有一个优先级字段,我想在一个记录中选择排名最高的这些记录的某些字段。如果该字段的值为null,则选择优先级较低的值。

您可以在下图中看到样本数据:橙色表是源,蓝色表是结果。

enter image description here

更新

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];

先谢谢你。

1 个答案:

答案 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