Используйте звездочку в подсчете с псевдонимом таблицы T- SQL - PullRequest
1 голос
/ 16 марта 2020

Как использовать агрегатную функцию, например COUNT, с * в сочетании с псевдонимом? COUNT позволяет использовать псевдоним таблицы с именами столбцов, но не *.

Это работает:

select e.*, COUNT(e.MGR)
from EMP as e 
left outer join EMP as e1 on e.EMPNO = e1.EMPNO
group by e.[EMPNO], e.[ENAME], e.[JOB], e.[MGR], e.[HIREDATE], e.[SAL], e.[COMM], e.[DEPTNO]

, но это не так:

select e.*, COUNT(e.*)
from EMP as e 
left outer join EMP as e1 on e.EMPNO = e1.EMPNO
group by e.[EMPNO], e.[ENAME], e.[JOB], e.[MGR], e.[HIREDATE], e.[SAL], e.[COMM], e.[DEPTNO]

Этот пример, использованный выше, является выдуманным для демонстрации случая. В каждой таблице нет столбца NOT-NULL. Итак, как мы посчитаем количество строк в левой таблице левого внешнего соединения

Ответы [ 2 ]

2 голосов
/ 16 марта 2020

Это отвечает первоначальной версии вопроса.

Используйте либо первичный ключ, либо один из столбцов, используемых в JOIN:

select e.*, COUNT(e1.EMPNO)
1 голос
/ 17 марта 2020

Ни в одной из таблиц нет столбца NOT-NULL. Так как нам посчитать количество строк в левой таблице левого внешнего соединения

Этого не должно быть, потому что у каждой таблицы должен быть первичный ключ, гарантирующий хотя бы один столбец NOT NULL.

Без такого столбца вы можете создать его во время выполнения, присоединившись к производной таблице, которая проецирует константу NOT NULL, и считая этот столбец.

select e.*, COUNT(e.Flag)
from (SELECT, *, 1 AS Flag FROM EMP) as e 
left outer join EMP as e1 on e.EMPNO = e1.EMPNO
group by ...
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...