Подтвердить что ты не робот

Как использовать группу с помощью union в t-sql

Как я могу использовать группу с помощью union в t-sql? Я хочу группировать по первому столбцу результата объединения, я написал следующий sql, но он не работает. Я просто не знаю, как ссылаться на указанный столбец (в данном случае равен 1) результата объединения. Огромное спасибо.

SELECT  *
FROM    ( SELECT    a.id ,
                    a.time
          FROM      dbo.a
          UNION
          SELECT    b.id ,
                    b.time
          FROM      dbo.b
        )
GROUP BY 1
4b9b3361

Ответ 1

GROUP BY 1

Я никогда не знал GROUP BY для поддержки использования ординалов, только ORDER BY. В любом случае, только MySQL поддерживает GROUP BY, не включая все столбцы без агрегатных функций, выполняемых на них. Ординалам не рекомендуется практиковать либо потому, что если они основаны на порядке SELECT - если это изменяется, то и ваш ORDER BY (или GROUP BY, если поддерживается).

Нет необходимости запускать GROUP BY в содержимом, когда вы используете UNION - UNION гарантирует, что дубликаты будут удалены; UNION ALL быстрее, потому что это не так - и в этом случае вам понадобится GROUP BY...

Ваш запрос должен быть только:

SELECT a.id,
       a.time
  FROM dbo.TABLE_A a
UNION
SELECT b.id,
       b.time
  FROM dbo.TABLE_B b

Ответ 2

Вам нужен псевдоним подзапроса. Таким образом, ваше утверждение должно быть:

Select Z.id
From    (
        Select id, time
        From dbo.tablea
        Union All
        Select id, time
        From dbo.tableb
        ) As Z
Group By Z.id

Ответ 3

Идентификация столбца проста:

SELECT  *
FROM    ( SELECT    id,
                    time
          FROM      dbo.a
          UNION
          SELECT    id,
                    time
          FROM      dbo.b
        )
GROUP BY id

Но это не решает основной проблемы этого запроса: что делать со значениями второго столбца при группировке по первой? Поскольку (особенно!) Вы используете UNION, а не UNION ALL, у вас не будет полностью дублированных строк между двумя субтитрами в объединении, но вы все же можете иметь несколько значений времени для одного значения id, и вы не даете никакого намека на то, что вы хотите сделать - min, max, avg, sum или что?! Из-за этого SQL-модуль должен дать ошибку (хотя некоторые из них, такие как mysql, просто выбирают случайное значение из нескольких, я считаю, что SQL-сервер лучше этого).

Итак, например, измените первую строку на SELECT id, MAX(time) или тому подобное!