我有一个包含以下列的简单表
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
该表基本上是安装在组织内各种计算机上的打印机的集合。由于同一台打印机可以安装在多台计算机上(想想网络打印机),因此表格中包含重复数据。我们可以使用PortName来识别重复项,但是,有些行会在PortName中显示略有不同的变化,例如10.0.0.200和10.0.0.200_1。
是否可以比较每行中的数据仅关注PortName列中的数据,以及数据是否相似,例如10.0.0.200 vs 10.0.0.200_1返回单行结果?
以下是表格的示例
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
...理想情况下我会回来
OKI MC560(POS)| OKI MC560试试1 | 10.0.0.200
我不会过于讨论哪些行返回PrinterModel / Printer Name,只要我们最终得到一个结果就可以来自任何行。
我在这里审核了类似的问题SQL compare data from two tables但是我无法看到他们如何使用差异命令比较文本字符串?
附上了当前查询的屏幕截图以及返回的数据。任何建议将不胜感激。
答案 0 :(得分:0)
尝试这样的事情:
Select max(PrinterModel), max(PrinterName), left(PortName,charindex("_",PortName+"_")-1)
from [ksubscribers].[dbo].[vCurrPrinterInfo]
where ......
group by left(PortName,charindex("_",PortName+"_")-1)
如果你不关心PrinterModel和PrinterName列中出现哪一个可能的值,那么这应该会给你所需的结果。
"左"功能有效地剥离了来自" _"等等。
添加_将涵盖最后没有_的情况。