Как я выполняю GROUP BY на искаженном столбце в SQL SERVER MS?

Показанный код Java отлично работает, предполагая, что doubleValue является float или double.

Как предложено здесь , Intent обрабатывается OutgoingCallBroadcaster.processIntent (), который обрабатывает Строка, указанная в намерении, вызовите PhoneNumberUtils.convertKeypadLettersToDigits () и PhoneNumberUtils.stripSeparators() .

Последний разделит все, кроме чисел, *, #, + и символы WILD, WAIT и PAUSE.

Здесь теряется ваш разделитель десятичных чисел.

Таким образом, либо разделитель должен быть экранирован до определенного числового значение или заменяется одним из принятых символов, чтобы фактически покинуть ваш телефон и добраться до приемника.

Тот, кто несет ответственность за принимающую сторону, может, вероятно, советовать вам правильно форматировать десятичное число.

59
задан Gavin Miller 3 February 2009 в 14:28
поделиться

9 ответов

Вы передаете выражение, которое Вы хотите сгруппировать, а не псевдоним

SELECT       LastName + ', ' + FirstName AS 'FullName'
FROM         customers
GROUP BY      LastName + ', ' + FirstName
70
ответ дан cmsjr 7 November 2019 в 14:42
поделиться

К сожалению, Вы не можете сослаться на свой псевдоним в операторе GROUP BY, необходимо будет записать логику снова, удивительный, поскольку это кажется.

SELECT       LastName + ', ' + FirstName AS 'FullName'
FROM         customers
GROUP BY     LastName + ', ' + FirstName

Поочередно Вы могли поместить выбор в подызбранное или общее выражение таблицы, после которого Вы могли сгруппироваться на имени столбца (больше псевдоним.)

8
ответ дан James Orr 7 November 2019 в 14:42
поделиться

Это - то, что я делаю.

SELECT FullName
FROM
(
  SELECT LastName + ', ' + FirstName AS FullName
  FROM customers
) as sub
GROUP BY FullName
<час>

Эта техника применяется простым способом к Вашему сценарию "редактирования":

SELECT FullName
FROM
(
  SELECT
     CASE
       WHEN LastName IS NULL THEN FirstName
       WHEN LastName IS NOT NULL THEN LastName + ', ' + FirstName
     END AS FullName
  FROM customers
) as sub
GROUP BY FullName
36
ответ дан Amy B 7 November 2019 в 14:42
поделиться

Учитывая Ваше отредактированное описание проблемы, я предложил бы использовать COALESCE() вместо того громоздкого CASE выражение:

SELECT FullName
FROM (
  SELECT COALESCE(LastName+', '+FirstName, FirstName) AS FullName
  FROM customers
) c
GROUP BY FullName;
3
ответ дан Bill Karwin 7 November 2019 в 14:42
поделиться

Мое предположение:

SELECT       LastName + ', ' + FirstName AS 'FullName'
FROM         customers
GROUP BY     LastName + ', ' + FirstName

Oracle имеет подобное ограничение, которое является раздражающим. Мне любопытно, если там существует лучшее решение.

Для ответа на вторую половину вопроса это ограничение относится к более сложным выражениям, таким как оператор выбора также. Лучшее предложение я видел его для использования подвыбора для именования сложного выражения.

3
ответ дан Jon Ericson 7 November 2019 в 14:42
поделиться

В старом FoxPro (я не использовал его начиная с версии 2.5), Вы могли записать что-то вроде этого:

SELECT       LastName + ', ' + FirstName AS 'FullName', Birthday, Title
FROM         customers
GROUP BY     1,3,2

мне действительно понравился тот синтаксис. Почему это не реализовано больше нигде? Это - хороший ярлык, но я предполагаю, что это вызывает другие проблемы?

0
ответ дан Peter Mortensen 7 November 2019 в 14:42
поделиться

Если Вы хотите избежать путаницы оператора выбора, находящегося в Вашем запросе дважды, можно хотеть поместить его в Пользовательскую Функцию.

Извините, но SQL Server не представил бы набор данных перед Группой пунктом, таким образом, псевдоним столбца не доступен. Вы могли использовать его в Порядке.

0
ответ дан JeffO 7 November 2019 в 14:42
поделиться
SELECT       
    CASE
        WHEN LastName IS NULL THEN FirstName
        WHEN LastName IS NOT NULL THEN LastName + ', ' + FirstName
    END AS 'FullName'
FROM
    customers
GROUP BY     
    LastName,
    FirstName

Это работает, потому что формула, которую Вы используете (Оператор выбора) никогда не может давать тот же ответ для двух различных исходных данных.

Дело обстоит не так, если Вы использовали что-то как:

LEFT(FirstName, 1) + ' ' + LastName

В таком случае "James Taylor" и "John Taylor" оба привел бы к "J Taylor".

, Если Вы хотели, чтобы Ваш вывод имел "J Taylor" дважды (один для каждого человека):

GROUP BY LastName, FirstName

, Если бы, однако, Вы хотели всего одну строку "J Taylor", Вы хотели бы:

GROUP BY LastName, LEFT(FirstName, 1)
1
ответ дан MatBailie 7 November 2019 в 14:42
поделиться

Извините, это не возможно с SQL Server MS (возможный хотя с PostgreSQL):

select lastname + ', ' + firstname as fullname
from person
group by fullname

Иначе просто использование это:

select x.fullname
from 
(
    select lastname + ', ' + firstname as fullname
    from person
) as x
group by x.fullname

Или это:

select lastname + ', ' + firstname as fullname
from person
group by lastname, firstname  -- no need to put the ', '

вышеупомянутый запрос быстрее, группирует поля сначала, затем вычисляют те поля.

следующий запрос медленнее (он пробует к [1 110], вычисляют сначала избранное выражение, затем он группирует записи на основе того вычисления).

select lastname + ', ' + firstname as fullname
from person
group by lastname + ', ' + firstname
6
ответ дан Peter Mortensen 7 November 2019 в 14:42
поделиться
Другие вопросы по тегам:

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