如何按特定顺序为每组输出 3 组信息?

How can I output 3 sets of info in a specific order for each set?

我对一些客户数据进行了大量分析,想展示我在他们的系统中发现的重复数据。

我根据 4 个不同的标准进行匹配,姓名、地址(多个地址和线路)和 Phone(与帐户关联的每个 phone 号码)和电子邮件(与帐户关联的每个电子邮件帐户)。

我把它全部归结为一个 table。

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 并且必须为整个数据集选择一个排序...这违背了目的,因为我只能这样做在 table 作为一个整体已经。 我知道我只能输出 4 次 diff,但目标是有一个输出,这样它就可以加载到 Excel 中的单个选项卡上。 (如果您知道如何将多个数据集输出到 Excel 中的单个选项卡,我很想知道该怎么做!)

我唯一能想到的就是将每个都放入一个新的 table 中,并带有一个 id,例如:

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]

除了感觉“hacky”之外,我不能 100% 确信数据确实以正确的顺序插入到新的 table 中。

这是一个大约有 50 万行的中型数据集。我正在使用 Azure,它比我在本地机器上做事时慢 3-5 倍,所以我想避免处理器密集型的东西,这将花费数小时 运行。

您可以使用 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;