2017-01-05 12 views
1

Я создал таблицу t1(ca char(1), cb char(10), test char(20), ord char(20)), и я хочу получить ca + cb с заказом ord.Как выбрать отдельные данные с требуемым ЗАКАЗОМ?

Чтобы получить данные, которые я написал запрос как: получил

select distinct ca + cb as exp, test 
from table 
order by ord, exp 

Ошибка:

ORDER BY пункты должны появиться в списке выбора, если SELECT DISTINCT задан. `

также попытался с внутреннего запроса, как

select exp, test 
from (select distinct ca + cb as exp, ord, test 
from ttemp 
order by ord, exp) 

получил Ошибка:

Поручения п недействительна в представлениях, встроенных функциях, производных таблиц, подзапросы, и общий стол выражения, если также не указаны TOP, OFFSET или FOR XML.

Как я могу выбрать distinct данные с требуемыми ORDER?

+1

ну, как у вас есть, вы просто не можете, если не используете функция агрегации на 'ord' – Lamak

+0

используйте' order by ca + cb', и ord вы не можете использовать. Если вы хотите упорядочить по орду, добавьте 'ord' для выбора выбранных полей ex:' select distinct ca + cb как exp, test, ord из таблицы order by ord, ca + cb'. –

+0

на ваш первый запрос, который вам нужно добавить * ord * в ваш список выбора, тогда он должен работать – Stephen

ответ

3

Попробуйте использовать group by. Конечно, наивно, это было бы:

select (ca + cb) as exp, test 
from table 
group by (ca + cb), test 
order by ord, exp 

И вы получите сообщение об ошибке, потому что ord не в select или group by. Итак, вам нужна функция агрегации. Например:

select (ca + cb) as exp, test 
from table 
group by (ca + cb), test 
order by min(ord), exp; 

Я хотел бы отметить, что вы можете тривиальным решить эту проблему, в том числе ord в select, либо select distinct или group by:

select distinct ca + cb as exp, test, ord 
from table 
order by ord, exp 
0

Вы можете использовать приведенный ниже запрос,

**select distinct ca + cb as exp, test, ord 
from table group by test ord 
order by ord, exp** 

Вы не выбрали ord в запросе, но использовали его в порядке, поэтому он выдаст ошибку. Во-вторых, когда вы агрегируете (сумма, счет, avg, min или max) по отношению к другим столбцам, вы должны использовать группу по статья

 Смежные вопросы

  • Нет связанных вопросов^_^