我有一张表格如下:
column_name
Mark
John
Peter
我想要下面的确切输出:
(No column name) c2 c3
Mark John Peter
NULL Mark John
我对此有疑问:
select case when id=11 then c1 else null end,c2,c3 from (
select t2.column_name c1,t1.column_name c2,t3.column_name c3,
ROW_NUMBER ()
OVER ( order by t1.column_name ) as id
from SmartName t1 join SmartName t2 on t1.column_name <> t2.column_name
join SmartName t3
on t2.column_name <> t3.column_name
) as a
where a.c1 <>a.c2 and a.c2<>a.c3 and a.c3 <> a.c1
and id in(2,11) order by c1
虽然它可以正常工作,但它排除了这个东西,我理解它是因为行计数中的ORDER BY。但有没有办法避免这种排序,同时达到相同的上述结果?
目前结果如下:
(No column name) c2 c3
John Peter Mark
NULL John Peter
答案 0 :(得分:0)
SQL表表示无序集,因此除非由列指定,否则它们没有排序。因此,如果没有额外的专栏,就没有一致而准确的方法来做你想做的事。
您可以告诉SQL Server您并不真正想要row_number()
的排序。你可以这样做:
ROW_NUMBER () OVER ( order by (SELECT NULL) ) as id
这并不是说“不做那种”。相反,它给出了一个常量值(不幸的是,SQL Server不允许order by
没有select
的常量。
可以解决您的问题。无法保证row_number()
枚举的行将按您所需的顺序排列。保证特定订单的 only 方法是将order by
与有效列或表达式一起使用。但是,可能做你想做的事。