2016-12-29 1 views
-1

소프트웨어가 설치되지 않은 모든 서버를 나열하는이 쿼리가 있는데, 하나 이상의 자산 ID가 반환되는 것이 문제입니다. 애셋 ID 당 하나의 결과 만 반환하고 싶습니다.SQL 쿼리 - 하나의 결과를 ID 당 반환합니다.

나는 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; 

,하지만 작동 얻을 수없는 것. 이 이전 버전을 포함하지 않는

편집

사과, 제대로 포맷 할 수 있습니다 :

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 

I를 : 여기에

내가지고있어 결과의 샘플입니다 애셋 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'가 작동하지 않는다면, 선택한 값은 recordID를 유일하게 만들고 그 때문에 assetID가 "Duplicated"가되는 원인이됩니다. assetID가 아닌 각 값의 max()를 선택할 수 있지만 실제로 다른 테이블에서 원하는 값입니까? tsysOS, tblSoftwareUni, tblSoftware에서 각 AssetID에 대한 값을 결정하는 것은 무엇입니까? – 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 

Order by(select NULL)를 교체합니다.

지금 결과가 임의의 것, 다른 기록은 자산 ID 당 별개의 행을 얻기 위해 각 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 
관련 문제