Предложение ORDER BY недопустимо в представлениях, встроенных функциях, производных таблицах, подзапросах, ...., если также не указан TOP или FOR XML - PullRequest
0 голосов
/ 05 мая 2018

Я пытаюсь объединить следующие 3 запроса:

select distinct  
    col1 
from 
    [dbname] 

select  
    COUNT(*)col2  
from 
    [dbname]  
group by 
    col1 
order by 
    col1

select 
    (COUNT(**)-1) /  COUNT(distinct col3)
from 
    [dbname] 
group by 
    col1 
order by 
    col1

как:

select distinct col1 , 
        (select  COUNT(*)col2 from [dbname] group by col1 order by col1 )as something, 
        (select (COUNT(*)-1) /  COUNT(distinct col3)from [dbname] group by col1 order by col1) as something1 
from [dbname]

Но я получаю следующую ошибку:

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

Как правильно его оформить?

Ответы [ 2 ]

0 голосов
/ 05 мая 2018

ищет ваши запросы, кажется, вы могли бы использовать один выбор, избегая подвыбора для значений столбцов

select col1, count(*) as col2, 
       (count(*)-1)/ count(distinct col3) as col_somethings
from [dbname]
group by col1 
order by col1
0 голосов
/ 05 мая 2018

Вы можете использовать subquery:

select col1, count(*) something1,
       count(*)-1 / (select count(distinct col3) from dbname where col1 = d.col1) something2
from dbname d
group by col1;

Тем не менее, вы также можете напрямую деформировать его в один SELECT оператор

select col1, count(*) something1,
       (count(*)-1 / count(distinct col3)) something2
from dbname d
group by col1;

Редактировать: Будьте внимательны с ошибкой деления на ноль, так что вы можете включить case выражение

select col1, count(*) something1,
       coalesce((count(*)-1/(case when count(distinct col3) = 0 
                                  then null else count(distinct col3) end)), 0) something2
from dbname d
group by col1;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...