2017-02-15 3 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と10.0.0.200_1の比較結果は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お試しください| 10.0.0.200

いずれの行からでも1つの結果しか得られない限り、PrinterModel/Printer Nameのどの行が返されるかわかりません。

ここでも同様の質問を確認しましたが、SQL compare data from two tablesという違いがありますが、differenceコマンドを使ってテキスト文字列をどのように比較しているのかわかりません。

返されたデータとともに現在のクエリのスクリーンショットを添付しました。どんなアドバイスも大歓迎です。

SQL Query Screen Shot

+0

'GROUP BY PortName'を使用できます。グループ化を使用する場合、選択領域の他の行は、MAX(PrinterModel)、MAX(PrinterName)のように集計する必要があります。例のようにPortNameが異なる場合は、PortNameを一意にする必要があります。たとえば、 '_1'を削除してください –

答えて

0

このような何か試してください:あなたが可能な値の1がPrinterModelとプリンタ名の列に表示されて気にしないと仮定すると必要な結果を与える必要があり

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

を。

"left"機能は、 "_"と "on"の部分を効果的に除去します。

_を追加すると、最後に_がない場合が含まれます。

+1

おそらく10文字より長い他のポート名があります。彼が提供した写真のように。 –

+0

@SebastianSchulz True写真のものは実際にはもっと短くなっていますが。 :) – theblitz

+0

彼らは奇妙で素晴らしいポート名のすべての種類です。ここにいくつかの例があります – Chiper