Как отобразить только одну строку данных в определенном столбце в SQL
Как отобразить только одну строку данных в определенном столбце в SQL

Если мы находимся в таблице, как мы можем сделать так, чтобы одна строка данных в определенном столбце отображалась только один раз?

Пример таблицы

StudentID

Last_Name

First_Name

Gender

GradeLevel

Class

Pupil_Email

Relationship

Pupil_Parent_Email

5013

Wang

Zack

M

Grade 9 Senior

SG9 B

5013@example.com

папа

5013a@qq.com

5013

Wang

Zack

M

Grade 9 Senior

SG9 B

5013@example.com

Мать

5013b@qq.com

5014

Liu

Aileen

F

Grade 2 Bilingual

BG2 D

5014@example.com

папа

5014a@qq.com

5014

Liu

Aileen

F

Grade 2 Bilingual

BG2 D

5014@example.com

Мать

5014b@qq.com

5014

Liu

Aileen

F

Grade 2 Bilingual

BG2 D

5014@example.com

Мать

5014b@qq.com

5017

Ying

Eason

F

Grade 9 Senior

SG9 A

5017@example.com

папа

5017e@qq.com

5017

Ying

Eason

F

Grade 9 Senior

SG9 A

5017@example.com

папа

5017e@qq.com

5029

Yan

Yuki

M

Grade 3 Bilingual

BG3 H

5029@example.com

папа

5029a@qq.com

5029

Yan

Yuki

M

Grade 3 Bilingual

BG3 H

5029@example.com

Мать

5029b1@qq.com

5029

Yan

Yuki

M

Grade 3 Bilingual

BG3 H

5029@example.com

Мать

5029b2@qq.com

5029

Yan

Yuki

M

Grade 3 Bilingual

BG3 H

5029@example.com

Мать

5029b3@qq.com

анализировать

как вы видете,Студенты с номерами 5014 и 5029, Мать, появляются несколько раз.,Одни и те же данные по 5017 студентам отображаются дважды. Итак, как нам сделать его данные,Это "Мать",Что, если отображается только один из них?

Step 1 DISTINCT

DISTINCT может удалять повторяющиеся данные и отображать только одну строку. Но это повторяющиеся данные для всех таблиц Select. Поэтому, если вы хотите, чтобы информация «Мать» просто отображала одну, это невозможно.

Давайте сначала удалим повторяющиеся данные 5017 студентов.

Шаг 2. MIN() и группировка по

Мы выполним MIN() или MAX() для столбца, в котором хотим отобразить только один фрагмент данных [отобразить первый в соответствии с размером буквы]

За группой By следуют все данные, кроме столбца MIN().

Язык кода:javascript
копировать
Select DISTINCT
StudentID
,Last_Name
,First_Name
,Gender
,GradeLevel
,Class
,Pupil_Email
,Relationship
,MIN(Pupil_Parent_Email) AS Pupil_Parent_Email

From TableA

Group By StudentID
,Last_Name
,First_Name
,Gender
,GradeLevel
,Class
,Pupil_Email
,Relationship

результат:

StudentID

Last_Name

First_Name

Gender

GradeLevel

Class

Pupil_Email

Relationship

Pupil_Parent_Email

5013

Wang

Zack

M

Grade 9 Senior

SG9 B

5013@example.com

папа

5013a@qq.com

5013

Wang

Zack

M

Grade 9 Senior

SG9 B

5013@example.com

Мать

5013b@qq.com

5014

Liu

Aileen

F

Grade 2 Bilingual

BG2 D

5014@example.com

папа

5014a@qq.com

5014

Liu

Aileen

F

Grade 2 Bilingual

BG2 D

5014@example.com

Мать

5014b@qq.com

5017

Ying

Eason

F

Grade 9 Senior

SG9 A

5017@example.com

папа

5017e@qq.com

5029

Yan

Yuki

M

Grade 3 Bilingual

BG3 H

5029@example.com

папа

5029a@qq.com

5029

Yan

Yuki

M

Grade 3 Bilingual

BG3 H

5029@example.com

Мать

5029b1@qq.com

Вся наша работа, описанная выше, завершена! Что если я захочу поменять местами строки и столбцы почтового ящика в этой таблице?

Если вы хотите обменять, то, конечно, это можно сделать напрямую через PIVOT, но если мы хотим сначала посчитать, сколько почтовых ящиков старейшин у ученика, а для каждого старейшины отображается только один почтовый ящик старейшин, что нам делать?

Step 3 ROW_NUMBER()

Учебное пособие по SQL Server ROW_NUMBER() учебное пособие

Мы можем сортировать по электронной почте родителей.

Ниже приводится основное использование

Язык кода:javascript
копировать
ROW_NUMBER() OVER (
Order By TableA.ColumnID
) AS Count_Row_No

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

Например:

Язык кода:javascript
копировать
ROW_NUMBER() OVER (
PARTITION By TableA.ColumnID
Order By TableA.ColumnID
) AS Count_Row_No

Это основано на ColumnID и учитывает количество раз, когда появляется один и тот же ColumnID.

Итак, подход в данном случае следующий:

Язык кода:javascript
копировать
Select DISTINCT
StudentID
,Last_Name
,First_Name
,Gender
,GradeLevel
,Class
,Pupil_Email
,Relationship
,MIN(Pupil_Parent_Email) AS Pupil_Parent_Email
,ROW_NUMBER() OVER (
PARTITION By TableA.StudentID
Order By TableA.StudentID
) AS Count_Row_No

From TableA

Group By StudentID
,Last_Name
,First_Name
,Gender
,GradeLevel
,Class
,Pupil_Email
,Relationship

Метод реализации Excel

на самом деле,ExcelПодсчет можно осуществить очень простым способом.。=COUNTIF(E 2:

Step 4 PIVOT

Наконец, нам нужно изменить почтовый ящик со столбцов на строки.

Язык кода:javascript
копировать
Select * From 
(
Select DISTINCT
StudentID
,Last_Name
,First_Name
,Gender
,GradeLevel
,Class
,Pupil_Email
/**
Нам нужно скрыть связи из таблицы, чтобы строки можно было превратить в столбцы в PIVOT.
**/
--,Relationship
,MIN(Pupil_Parent_Email) AS Pupil_Parent_Email
,ROW_NUMBER() OVER (
PARTITION By TableA.StudentID
Order By TableA.StudentID
) AS RelationEmailCount

From TableA

Group By StudentID
,Last_Name
,First_Name
,Gender
,GradeLevel
,Class
,Pupil_Email
,Relationship
) As BaseTable
PIVOT (
	MAX(Pupil_Parent_Email)
	FOR [RelationEmailCount] in ([1],[2])
) As Result
Order By Last_Name

Результат следующий:

StudentID

Last_Name

First_Name

Gender

GradeLevel

Class

Pupil_Email

1

2

5014

Liu

Aileen

F

Grade 2 Bilingual

BG2 D

5014@example.com

5014a@qq.com

5014b@qq.com

5013

Wang

Zack

M

Grade 9 Senior

SG9 B

5013@example.com

5013a@qq.com

5013b@qq.com

5029

Yan

Yuki

M

Grade 3 Bilingual

BG3 H

5029@example.com

5029a@qq.com

5029b1@qq.com

5017

Ying

Eason

F

Grade 9 Senior

SG9 A

5017@example.com

5017e@qq.com

NULL

Как реализовать STRING_AGG

StudentID

Last_Name

First_Name

Gender

GradeLevel

Class

Pupil_Email

Relationship

Pupil_Parent_Email

5013

Wang

Zack

M

Grade 9 Senior

SG9 B

5013@example.com

папа

5013a@qq.com

5013

Wang

Zack

M

Grade 9 Senior

SG9 B

5013@example.com

Мать

5013b@qq.com

5014

Liu

Aileen

F

Grade 2 Bilingual

BG2 D

5014@example.com

папа

5014a@qq.com

5014

Liu

Aileen

F

Grade 2 Bilingual

BG2 D

5014@example.com

Мать

5014b@qq.com

5017

Ying

Eason

F

Grade 9 Senior

SG9 A

5017@example.com

папа

5017e@qq.com

5029

Yan

Yuki

M

Grade 3 Bilingual

BG3 H

5029@example.com

папа

5029a@qq.com

5029

Yan

Yuki

M

Grade 3 Bilingual

BG3 H

5029@example.com

Мать

5029b1@qq.com

Язык кода:javascript
копировать
Select
StudentID
,Last_Name
,First_Name
,Gender
,GradeLevel
,Class
,Pupil_Email
--,Relationship
,STRING_AGG(Pupil_Parent_Email, ',') AS Pupil_Parent_Email

From TableA

Group By StudentID
,Last_Name
,First_Name
,Gender
,GradeLevel
,Class
,Pupil_Email
,Relationship

StudentID

Last_Name

First_Name

Gender

GradeLevel

Class

Pupil_Email

Pupil_Parent_Email

5013

Wang

Zack

M

Grade 9 Senior

SG9 B

5013@example.com

5013a@qq.com ,5013b@qq.com

5014

Liu

Aileen

F

Grade 2 Bilingual

BG2 D

5014@example.com

5014a@qq.com ,5014b@qq.com

5017

Ying

Eason

F

Grade 9 Senior

SG9 A

5017@example.com

5017e@qq.com

5029

Yan

Yuki

M

Grade 3 Bilingual

BG3 H

5029@example.com

5029a@qq.com ,5029b1@qq.com

Затем вы можете создать новую строку разделенных столбцов путем разделения запятыми.

SQL как разделить запятые внутри значений в одном столбце на другой столбец

boy illustration
Неразрушающее увеличение изображений одним щелчком мыши, чтобы сделать их более четкими артефактами искусственного интеллекта, включая руководства по установке и использованию.
boy illustration
Копикодер: этот инструмент отлично работает с Cursor, Bolt и V0! Предоставьте более качественные подсказки для разработки интерфейса (создание навигационного веб-сайта с использованием искусственного интеллекта).
boy illustration
Новый бесплатный RooCline превосходит Cline v3.1? ! Быстрее, умнее и лучше вилка Cline! (Независимое программирование AI, порог 0)
boy illustration
Разработав более 10 проектов с помощью Cursor, я собрал 10 примеров и 60 подсказок.
boy illustration
Я потратил 72 часа на изучение курсорных агентов, и вот неоспоримые факты, которыми я должен поделиться!
boy illustration
Идеальная интеграция Cursor и DeepSeek API
boy illustration
DeepSeek V3 снижает затраты на обучение больших моделей
boy illustration
Артефакт, увеличивающий количество очков: на основе улучшения характеристик препятствия малым целям Yolov8 (SEAM, MultiSEAM).
boy illustration
DeepSeek V3 раскручивался уже три дня. Сегодня я попробовал самопровозглашенную модель «ChatGPT».
boy illustration
Open Devin — инженер-программист искусственного интеллекта с открытым исходным кодом, который меньше программирует и больше создает.
boy illustration
Эксклюзивное оригинальное улучшение YOLOv8: собственная разработка SPPF | SPPF сочетается с воспринимаемой большой сверткой ядра UniRepLK, а свертка с большим ядром + без расширения улучшает восприимчивое поле
boy illustration
Популярное и подробное объяснение DeepSeek-V3: от его появления до преимуществ и сравнения с GPT-4o.
boy illustration
9 основных словесных инструкций по доработке академических работ с помощью ChatGPT, эффективных и практичных, которые стоит собрать
boy illustration
Вызовите deepseek в vscode для реализации программирования с помощью искусственного интеллекта.
boy illustration
Познакомьтесь с принципами сверточных нейронных сетей (CNN) в одной статье (суперподробно)
boy illustration
50,3 тыс. звезд! Immich: автономное решение для резервного копирования фотографий и видео, которое экономит деньги и избавляет от беспокойства.
boy illustration
Cloud Native|Практика: установка Dashbaord для K8s, графика неплохая
boy illustration
Краткий обзор статьи — использование синтетических данных при обучении больших моделей и оптимизации производительности
boy illustration
MiniPerplx: новая поисковая система искусственного интеллекта с открытым исходным кодом, спонсируемая xAI и Vercel.
boy illustration
Конструкция сервиса Synology Drive сочетает проникновение в интрасеть и синхронизацию папок заметок Obsidian в облаке.
boy illustration
Центр конфигурации————Накос
boy illustration
Начинаем с нуля при разработке в облаке Copilot: начать разработку с минимальным использованием кода стало проще
boy illustration
[Серия Docker] Docker создает мультиплатформенные образы: практика архитектуры Arm64
boy illustration
Обновление новых возможностей coze | Я использовал coze для создания апплета помощника по исправлению домашних заданий по математике
boy illustration
Советы по развертыванию Nginx: практическое создание статических веб-сайтов на облачных серверах
boy illustration
Feiniu fnos использует Docker для развертывания личного блокнота Notepad
boy illustration
Сверточная нейронная сеть VGG реализует классификацию изображений Cifar10 — практический опыт Pytorch
boy illustration
Начало работы с EdgeonePages — новым недорогим решением для хостинга веб-сайтов
boy illustration
[Зона легкого облачного игрового сервера] Управление игровыми архивами
boy illustration
Развертывание SpringCloud-проекта на базе Docker и Docker-Compose