SQL 比较一列的行数据 Return 生活结果作为一行

SQL Comapare Row Data For One Column Return Like Results As One Row

我有一个简单的 table,其中包含以下列

PrinterModel : 打印机型号。

PrinterName:用户计算机上显示的打印机名称。

PortName : 通常是 IP、UNC 路径或 USB。

MachName :找到打印机的计算机。

我创建了以下查询

SELECT PrinterModel, PrinterName, PortName
FROM [ksubscribers].[dbo].[vCurrPrinterInfo]
WHERE PrinterModel NOT LIKE '%Microsoft%'
      AND PrinterModel NOT LIKE '%PDF%'
      AND PrinterModel NOT LIKE '%HP ePrint%'
      AND PrinterModel NOT LIKE '%Snagit%'
      AND PrinterModel NOT LIKE '%Nuance%'
      AND PrinterModel NOT LIKE '%Amyuni%'
      AND PrinterModel NOT LIKE '%Foxit%'
      AND PrinterModel NOT LIKE '%Brother PC-FAX%'
      AND PrinterModel NOT LIKE '%Remote Desktop%'
      AND PrinterModel NOT LIKE '%Wondershare%'
ORDER BY PortName

table 基本上是安装在组织内各种计算机上的打印机的集合。由于同一台打印机可以安装在多台计算机上(想想网络打印机),table 充满了重复项。我们可以使用 PortName 来识别重复项,但是,某些行会显示 PortName 的轻微变化,例如10.0.0.200 和 10.0.0.200_1。

是否可以比较每行中的数据,只关注 PortName 列中的数据,以及数据是否相似,例如10.0.0.200 与 10.0.0.200_1 return 单行结果?

这里是 table

的例子
Model          |     Name         |  Port

OKI MC560 (POS) | OKI MC560 Try 1 | 10.0.0.200

OKI MC560 (PCL) | OKI MC560 Try 2 | 10.0.0.200

OKI MC560 (PCL) | OKI MC560 Try 3 | 10.0.0.200_1

OKI MC560 (TST) | OKI MC560 Try 1 | 10.0.0.200

...理想情况下我会 return

冲电气 MC560(收银机) | OKI MC560 试用1 | 10.0.0.200

我不太在意 PrinterModel/Printer 名称是 return 的哪一行,只要我们最终只得到一个结果,它可以来自任何行。

我在此处查看了一个类似的问题 SQL compare data from two tables 但是我看不出他们是如何使用 difference 命令比较文本字符串的?

已附上当前查询的屏幕截图以及 returned 数据。任何建议将不胜感激。

SQL Query Screen Shot

尝试这样的事情:

Select max(PrinterModel), max(PrinterName), left(PortName,charindex("_",PortName+"_")-1)
from [ksubscribers].[dbo].[vCurrPrinterInfo]
where ......
group by left(PortName,charindex("_",PortName+"_")-1)

假设您不关心 PrinterModel 和 PrinterName 列中出现的可能值中的哪一个,这应该会为您提供所需的结果。

"left" 函数有效地去除了来自“_”等的部分。

添加 _ 将涵盖末尾没有 _ 的情况。