Как использовать группу с объединением в t-sql

awk '//{ORS=""} /<\/table>/{ORS=RS} 1' file 

для каждой строки:

  • , если
найден, набор Output Record Separator к пустой строке (""),
  • , если
  • найден, восстановление ORS,
  • печать.
  • посмотрите этот демонстрация онлайн .

    примечание, что это могло бы работать на Ваш образец, но очевидно не будет работать на весь table элементы. см. , почему парсинг HTML с помощью regex является плохой практикой .

    24
    задан Ian 12 November 2014 в 04:15
    поделиться

    3 ответа

    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
    
    20
    ответ дан 28 November 2019 в 22:08
    поделиться

    Идентифицировать столбец легко:

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

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

    Так, например, измените первое в строке SELECT id, MAX (time) и т.п.!

    6
    ответ дан 28 November 2019 в 22:08
    поделиться

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

    Select Z.id
    From    (
            Select id, time
            From dbo.tablea
            Union All
            Select id, time
            From dbo.tableb
            ) As Z
    Group By Z.id
    
    92
    ответ дан 28 November 2019 в 22:08
    поделиться
    Другие вопросы по тегам:

    Похожие вопросы: