具有不同WHERE条件的ORDER BY

时间:2017-11-15 09:09:49

标签: sql sql-server

以下说明了我的问题。

SELECT field
FROM myTable
WHERE field1 = 'abc' AND filed2 = 'xyz' AND field3 = 'pqr'
ORDER BY field4 ASC

此查询的结果为:

result1
result2
result3

现在,如果我运行以下查询,那么

SELECT field
FROM myTable
WHERE field1 = 'xxx' AND field2 = 'xyz'
ORDER BY field4 ASC

result2
result3
result1

因此,基本上两个查询都会给出相同的结果,但顺序不同。但我希望第一个查询的结果与第二个查询ORDER BY。看到两者在field1上有不同的条件。其他一切都是一样的。

2 个答案:

答案 0 :(得分:3)

这没有任何问题。

2查询返回不同的行(第一个使用field1 ='abc',第二个使用'xxx'),那么为什么这两个结果集应该相关呢?

以下是一个例子:

declare @myTable table (field varchar(100), 
                        field1 varchar(100), 
                        field2 varchar(100), 
                        field3 varchar(100), 
                        field4 int);

insert into @myTable (field, field1, field2, field3, field4)
values  ('result1', 'abc', 'xyz', 'pqr',1),
('result2', 'abc', 'xyz', 'pqr',2),
('result3', 'abc', 'xyz', 'pqr',3);

insert into @myTable (field, field1, field2, field4)
values
('result2', 'xxx', 'xyz',1),
('result3', 'xxx', 'xyz',2),
('result1', 'xxx', 'xyz',3);


SELECT field
FROM @myTable
WHERE field1 = 'abc' AND field2 = 'xyz' AND field3 = 'pqr'
ORDER BY field4 ASC

--result1
--result2
--result3

SELECT field
FROM @myTable
WHERE field1 = 'xxx' AND field2 = 'xyz'
ORDER BY field4 ASC

--result2
--result3
--result1

答案 1 :(得分:0)

您可以将第二个语句的子查询添加到第一个中,如下所示,并按顺序排列。

SELECT t1.field, 
(SELECT top 1 t2.field4
    FROM myTable t2
    WHERE t2.field1 = 'xxx' AND t2.field2 = 'xyz'
    AND t2.field = t1.field) as orderField
FROM myTable t1
WHERE t1.field1 = 'abc' AND t1.filed2 = 'xyz' AND t1.field3 = 'pqr'
ORDER BY orderField ASC