#sql #sql-server #string #distinct #aggregate-functions
#sql #sql-сервер #строка #distinct #агрегатные функции
Вопрос:
У меня есть таблица из моей базы данных SQL Server, состоящая из столбца stylecode и изображения:
stylecode images
CTWAI4-RC https://dwk1ydkfsczz3.cloudfront.net/CTWAI4-3589-1jpg-90da2f9b-d942-49f5-85df-a5fae6a76934.jpg
CTWAI4-RC https://dwk1ydkfsczz3.cloudfront.net/CTWAI4-3589-1jpg-90da2f9b-d942-4785-85df-a5fae6a76934.jpg
WSM6HW-RC https://dwk1ydkfsczz3.cloudfront.net/WSM6HW-0090-1jpg-998a79f1-6ed9-4610-b30d-113745e37c59.jpg
WSM6HW-RC https://dwk1ydkfsczz3.cloudfront.net/WSM6HW-0090-1jpg-998a7781-6ed9-4610-b30d-113745e37c59.jpg
WLY8OW-RC https://dwk1ydkfsczz3.cloudfront.net//WLY8OW-0026-1jpg-b526d225-5ae5-44fc-b78b-d755a3d94ff6.jpg
WLY8OW-RC https://dwk1ydkfsczz3.cloudfront.net/WLY8OW-1651-1jpg-0051b696-d786-4864-9466-75f90b96fa33.jpg
Как вы можете видеть, у меня несколько раз один и тот же стиль, я хотел бы сделать запрос в моей таблице, чтобы иметь только один и тот же код стиля и адрес соответствующих изображений.
Итак, я сделал :
select distinct stylecode from dbo.Y2_Images;
Который возвращает весь уникальный код стиля, но я хотел бы иметь рядом с ним значения соответствующих изображений,
Я сделал
select * from dbo.Y2_Images group by stylecode;
но моя ошибка заключается в том, что:
Column 'dbo.Y2_Images.images' is invalid in the select list because it is not contained in either an aggregate function or the GROUP BY clause.
Как сделать так, чтобы два столбца имели одинаковые значения, отсортировав уникальные значения стиля кода?
Комментарии:
1. «но я хотел бы иметь рядом с ним значения соответствующего изображения» разве это не просто
SELECT stylecode, images FROM dbo.YourTable;
..?2. Если у вас есть несколько изображений для каждого кода стиля, вам нужно будет выбрать, какое из них вы хотите показать. Sql server не может принять это решение за вас.
3. Да, но это займет весь мой стол, я хочу иметь уникальный стиль и соответствующие фотографии @Larnu
4. Если мне нужен первый из каждого кода стиля, как мне это сделать? @HoneyBadger
5. Что означает «первый»?
Ответ №1:
Есть еще один способ понять ваш вопрос.
Если вам нужны отдельные кортежи стилей / изображений, то:
select distinct stylecode, images from dbo.Y2_images
Если вам нужно только одно изображение для каждого стиля, даже если существует несколько различных значений, используйте агрегатную функцию, такую как max()
или min()
:
select sylecode, max(images) as images from dbo.Y2_images group by sylecode
Если вы хотите, чтобы все отдельные изображения были в одном столбце, когда их несколько, используйте агрегацию строк:
select stylecode, stringagg(distinct images, ',') as images from db.Y2_images group by stylecode