У меня есть таблица:
хотите получить этот результат, где код = 1 и группировка по имени
Я попробовал этот запрос:
select name, code where code=1 and group by name , code
но я просто понимаю это:
Как я могу это исправить, чтобы получить правильные результаты?
Ваши правки сбивают с толку и трудно понять, чего вы хотите. В любом случае в вашем запросе отсутствует FROM.
Я хочу группировать по имени, где имя с кодом = 1 и любое имя имеют код = 1, тогда должен появиться другой код.
Используйте подзапрос или CTE.
Желаемые результаты — упорядочивание/сортировка по имени, а не группировка по имени.
Какую СУБД вы используете?
Какие значения возможны в виде кода? NULL, отрицательные значения, это столбец varchar или целочисленный? Может ли один и тот же код появляться более одного раза для одного и того же имени? Будет ли это иметь значение? Я думаю, что ваш вопрос все еще очень расплывчат. Может быть, ответ правильный, а может, и нет, вам следует улучшить вопрос.


Похоже, вам нужны все записи для имен, содержащих код = 1.
SELECT *
FROM Example
WHERE name in
(SELECT name from Example WHERE Code='1')
Версия CTE, предложенная изолированным
WITH CTE as
(
SELECT * FROM EXAMPLE WHERE Code='1'
)
SELECT E.*
FROM CTE C
INNER JOIN Example E ON C.name=E.name
Отличный. Большое спасибо.
@mike, лучше проголосовать и отметить ответ как принятый значком ✔, чем говорить спасибо.
Обратите внимание, что запросы будут возвращать разные результаты, если есть повторяющиеся строки с кодом = 1.
Вы также можете использовать оконную функцию, чтобы убедиться, что имя имеет код 1 в одной из строк:
select name, code
from (
select name, code,
sum(case when code = 1 then 1 else 0 end) over (partition by name) code1
from Example
) dt
where code1 > 0
Возможно, будет работать лучше, поскольку таблица читается только один раз.
Почему вы ожидаете получить результаты, где код равен 2, если у вас есть «где код = 1»?