我有一个观点,我创建了从表中读取以及包含硬编码值的视图。视图是按预期创建的,除了我想按视图定义中的列排序。
查看:
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
进行排序非常感谢任何帮助
答案 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]