Как я могу вывести 3 набора информации в определенном порядке для каждого набора?

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

Я сопоставляю на основе 4 отдельных критериев: Имя, Адрес (несколько адресов и линий), Телефон (каждый номер телефона, связанный с учетной записью) и Электронная почта (каждый адрес электронной почты, связанный с учетной записью).

Свожу все в одну таблицу.

CREATE TABLE [dbo].[dupe_Customers](
    [id] [int] IDENTITY(1,1) NOT NULL,
    [MatchOn] [varchar](255) NULL,
    [DataID] [varchar](255) NULL,
    [CustName] [varchar](255) NULL,
    [Address] [varchar](255) NULL,
    [Phone] [varchar](255) NULL,
    [Fax] [varchar](255) NULL,
    [Email] [varchar](255) NULL
)

Когда я представляю его, я хочу просмотреть его в определенном порядке и порядке в каждом наборе данных.

SELECT * FROM [dupe_Customers] WHERE [MatchOn] = 'Name' ORDER BY [CustName]

SELECT * FROM [dupe_Customers] WHERE [MatchOn] = 'Address' ORDER BY [Address]

SELECT * FROM [dupe_Customers] WHERE [MatchOn] = 'Phone' ORDER BY [Phone]

SELECT * FROM [dupe_Customers] WHERE [MatchOn] = 'Email' ORDER BY [Email]

Если я использую UNION, я, конечно, не могу использовать ORDER BY и должен выбрать один порядок для всего набора данных... Что противоречит цели, поскольку я уже могу просто сделать это для таблицы в целом. Я знаю, что могу просто вывести 4 раза разницы, но цель состоит в том, чтобы получить один вывод, чтобы его можно было загрузить на одной вкладке в Excel. (Если вы знаете, как выводить несколько наборов данных на одну вкладку в Excel, мне бы очень хотелось узнать, как это сделать!)

Единственное, о чем я могу думать, это поместить каждую в новую таблицу с идентификатором, например:

SELECT identity (int,1,1) as [id], * INTO newTable FROM [dupe_Customers] WHERE [MatchOn] = 'Name' ORDER BY [CustName]

INSERT INTO newTable
  SELECT * FROM [dupe_Customers] WHERE [MatchOn] = 'Address' ORDER BY [Address]

Тогда я бы просто сделал SELECT * FROM newTable ORDER BY [id]

В дополнение к ощущению «хакерства» я не уверен на 100%, что данные действительно вставляются в новую таблицу в правильном порядке.

Речь идет о наборе данных среднего размера, содержащем около 500 тыс. строк. Я использую Azure, и это в 3-5 раз медленнее, чем когда я делал что-то на своем локальном компьютере, поэтому я хотел бы избежать чего-то слишком интенсивного для процессора, на выполнение которого уйдут часы.

Используйте выражение CASE, чтобы построить предложение ORDER BY таким образом, чтобы оно упорядочивалось так, как вам нужно.

Dale K 03.05.2022 01:37
ReactJs | Supabase | Добавление данных в базу данных
ReactJs | Supabase | Добавление данных в базу данных
Это и есть ваш редактор таблиц в supabase.👇
Понимание Python и переход к SQL
Понимание Python и переход к SQL
Перед нами лабораторная работа по BloodOath:
0
1
15
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Вы можете заказать, используя выражение CASE:

SELECT *
FROM [dupe_Customers]
WHERE [MatchOn] IN ('Name', 'Address', 'Phone', 'Email')
ORDER BY [MatchOn],
         CASE [MatchOn]
         WHEN 'Name' THEN CustName
         WHEN 'Address' THEN Address
         WHEN 'Phone' THEN Phone
         WHEN 'Email' THEN Email END;

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

Dizzy49 03.05.2022 18:42

Другие вопросы по теме