使用硬编码值创建视图,包括order by

时间:2018-03-22 18:29:21

标签: sql-server tsql sql-view

我有一个观点,我创建了从表中读取以及包含硬编码值的视图。视图是按预期创建的,除了我想按视图定义中的列排序。

查看:

create VIEW [dbo].[RPTLV_PICKIDS] (   [Fixed],   [Item],   [Desc]    )   AS  select 0, 'test1', 'test1' union select 0, 'test2', 'test2'  union select 0,  cast(PickID as varchar(11)), cast(PickID as varchar(11))  FROM dbo.table group by pickid

作为注释,我在运行select时无法控制订单。

我正在寻找的结果将是当我运行以下时:

select * from dbo.RPTLV_PICKIDS order by item

在后台运行一个查询,以便从返回以下内容的视图中进行选择:

Fixed     Item     Desc
0         1        1
0         2        2
0         test1    test1
0         test2    test2

期望的结果:

Fixed     Item     Desc
0         test1    test1
0         test2    test2
0         1        1
0         2        2

我需要以某种方式改变视图的创建以按Item

进行排序

非常感谢任何帮助

2 个答案:

答案 0 :(得分:0)

{knee-jerk reaction,total air code}

由于我们正在谈论自定义排序,然后更改您的ORDER BY子句以使用CASE语句,就像这样..

ORDER BY 
   CASE Item WHEN 'test1' THEN 1 WHEN 'test2' THEN 2 ELSE 3 END, 
   Item

此外,如果没有像TOP 100 PERCENT这样的解决方法,观点并没有真正处理ORDER BY(Richard的评论),所以如果订购真的很重要,那么存储过程可能是更好的选择。

答案 1 :(得分:0)

试试这个:

select [col1],[col2],[col3] from (
    --just assign additional rank column to order by and then omit it in outer select query
    select 0 [rank], 0 [col1], 'test1' [col2], 'test1' [col3]

    union 

    select 0, 0, 'test2', 'test2'  

    union 

    select 1, 0,  
           cast(PickID as varchar(11)), 
           cast(PickID as varchar(11))  
    FROM dbo.table group by pickid

) order by [rank]