2017-02-15 56 views
0

我有以下的列SQL Comapare行數據的一列返回類似的結果作爲一個行

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但是我看不出他們是如何使用差異命令比較文本字符串的?

附加了當前查詢的屏幕截圖以及返回的數據。任何意見將不勝感激。

SQL Query Screen Shot

+0

您可以使用'GROUP BY PortName'。如果您使用分組,則選擇區域中的其他行必須彙總爲'MAX(PrinterModel),MAX(PrinterName)'。如果PortName與您的示例中不同,則應使PortName唯一。例如刪除'_1' –

回答

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的列。

「左」功能可以有效地去除「_」和之後的零件。

添加_將覆蓋最後沒有_的情況。

+1

也許還有其他的端口名稱,其長度超過10個字符。就像他提供的圖片一樣。 –

+0

@SebastianSchulz確實。儘管圖片中的圖片實際上不再更長。 :) – theblitz

+0

糾正他們是各種奇怪和美妙的端口名稱。這裏有一些例子 – Chiper

相關問題