2016-12-29 22 views
-1

ソフトウェアをインストールしていないすべてのサーバーを一覧表示するこのクエリがありますが、複数の資産IDが返されているという問題があります。 アセットIDごとに1つの結果を返すだけです。SQLクエリ - IDごとに1つの結果を返します

私はDISTINCTを使用しようとしていますが、それは正しくできません。数百行ではなく、何千もの行を返しています。ここで

はSQLです:私はここに同様の質問を見や提案を実装しようとしてい

Select Top 1000000 tblAssets.AssetID, 
    tblAssets.AssetUnique, 
    tblAssets.Domain, 
    tblAssets.Username, 
    tblSoftwareUni.softwareName As software, 
    tblSoftware.softwareVersion As version, 
    tblSoftwareUni.SoftwarePublisher As publisher, 
    tsysOS.OSname As OS, 
    tsysOS.Image As icon 

From tblSoftware 
    Inner Join tblAssets On tblSoftware.AssetID = tblAssets.AssetID 
    Inner Join tblSoftwareUni On tblSoftware.softID = tblSoftwareUni.SoftID 
    Inner Join tblAssetCustom On tblAssets.AssetID = tblAssetCustom.AssetID 
    Inner Join tsysOS On tblAssets.OScode = tsysOS.OScode 

Where tblSoftwareUni.softwareName Not Like 'Hawkeye G Host Sensor%' And 
    tblAssetCustom.State = 1 
    AND tsysOS.OSname Not Like 'Win 7' 
    AND tsysOS.OSname Not Like 'Win 10' 
    AND tsysOS.OSname Not Like 'Win 8.1' 
    AND tsysOS.OSname Not Like 'Win XP' 
    AND tsysOS.OSname Not Like 'Win 8' 

Order By AssetID Asc; 

が、それは働いてもらうように見えることはできません。

EDITこの先に含まれていないため

謝罪、それを適切にフォーマットすることができませんでした。ここで

は私が取得していた結果のサンプルです:

AssetID AssetUnique Domain Username software version publisher OS icon 
3133 COMPUTERNAME DOMAIN Administrator Realtek High Definition Audio Driver 5.10.0.5404 Realtek Semiconductor Corp. Win 2003 R2 win200310.png 
3133 COMPUTERNAME DOMAIN Administrator Certero AssetStudio Client 3.2.0 Certero Win 2003 R2 win200310.png 
3133 COMPUTERNAME DOMAIN Administrator Intel(R) PRO Network Connections 12.1.12.0 12.1 Intel Win 2003 R2 win200310.png 
3133 COMPUTERNAME DOMAIN Administrator Certero AssetStudio 5.0 Client 5.0.703.20109 Certero Win 2003 R2 win200310.png 
3133 COMPUTERNAME DOMAIN Administrator LiveReg (Symantec Corporation) 2.4.2.2295 Symantec Corporation Win 2003 R2 win200310.png 
3133 COMPUTERNAME DOMAIN Administrator MopUPS Express   Win 2003 R2 win200310.png 
3133 COMPUTERNAME DOMAIN Administrator Sophos AutoUpdate 5.2.0.276 Sophos Limited Win 2003 R2 win200310.png 
3133 COMPUTERNAME DOMAIN Administrator MSXML 6 Service Pack 2 (KB954459) 6.20.1099.0 Microsoft Corporation Win 2003 R2 win200310.png 
3133 COMPUTERNAME DOMAIN Administrator Snow Inventory Client for Windows (x86) 3.7.04 Snow Software AB Win 2003 R2 win200310.png 

私はアセットIDごとに複数の結果が表示されます

+3

サンプルデータと予想される出力を追加します。 –

+3

サンプルデータ、予想される結果、試したものと一緒に投稿してください。質問を改善するためにここを確認してください:https://spaghettidba.com/2015/04/24/how-to-post-at-sql-question -on-a-public-forum/ – TheGameiswar

+1

論理的には、結合は1:M関係です。したがって、「Select distinct top X'」が機能していない場合、選択した値はレコードをユニークにするため、assetIDが「Duplicated」になる原因となります。 assetIDではなく各値のmax()を選択できますが、実際には他のテーブルから必要な値ですか?各AssetIDのtsysOS、tblSoftwareUni、tblSoftwareからの価値を決定するのは何ですか? – xQbert

答えて

1

使用ROW_NUMBERウィンドウ関数

select * from 
(
select row_number()over(partition by tblAssets.AssetID order by (select NULL)) Rn, 
     ... 
from your query 
) A 
Where RN = 1 

あなたは結果を注文すると、最初または最後の1を取得するために他の列を持っている場合Order by(select NULL)を交換してください。

さて結果は任意となり、別のレコードがAssetIDごとに個別の行を取得するために、各AssetID

0

利用ROW_NUMBER()関数のために選択することができます。何かのように....

SELECT Top 1000000 * 
FROM (
Select tblAssets.AssetID, 
    tblAssets.AssetUnique, 
    tblAssets.Domain, 
    tblAssets.Username, 
    tblSoftwareUni.softwareName As software, 
    tblSoftware.softwareVersion As version, 
    tblSoftwareUni.SoftwarePublisher As publisher, 
    tsysOS.OSname As OS, 
    tsysOS.Image As icon, 
    ROW_NUMBER() OVER (PARTITION BY tblAssets.AssetID ORDER BY tblAssets.AssetID)rn 

From tblSoftware 
    Inner Join tblAssets On tblSoftware.AssetID = tblAssets.AssetID 
    Inner Join tblSoftwareUni On tblSoftware.softID = tblSoftwareUni.SoftID 
    Inner Join tblAssetCustom On tblAssets.AssetID = tblAssetCustom.AssetID 
    Inner Join tsysOS On tblAssets.OScode = tsysOS.OScode 

Where tblSoftwareUni.softwareName Not Like 'Hawkeye G Host Sensor%' And 
    tblAssetCustom.State = 1 
    AND tsysOS.OSname Not Like 'Win 7' 
    AND tsysOS.OSname Not Like 'Win 10' 
    AND tsysOS.OSname Not Like 'Win 8.1' 
    AND tsysOS.OSname Not Like 'Win XP' 
    AND tsysOS.OSname Not Like 'Win 8' 
)A 
WHERE rn = 1 
Order By AssetID Asc 
関連する問題