您好我有一个查询,它返回带有相应IP地址的计算机名称,如下所示:
SELECT DISTINCT TOP (100) PERCENT dbo.Inv_AeX_AC_TCPIP.[IP Address],
dbo.Inv_AeX_AC_TCPIP.[Host Name]
FROM dbo.Inv_AeX_AC_Identification
INNER JOIN dbo.Inv_AeX_AC_TCPIP
ON dbo.Inv_AeX_AC_Identification._ResourceGuid = dbo.Inv_AeX_AC_TCPIP._ResourceGuid
这将返回结果,例如:
Computer: IP:
Frank's Computer 10.0.0.1
Frank's Computer 10.0.0.3
Nick's Computer 10.0.1.0
是否可以只返回第一个“弗兰克计算机”行,并排除另一行?
谢谢!
答案 0 :(得分:2)
是的,这是可能的,但是如何取决于您选择的DBMS。您正在寻找的功能是GROUP BY
,它将相似的结果放在同一列中,但显然它确实需要知道如何处理非聚合值,方法是将它们放在像{{{}这样的聚合函数中。 1}},max
或min
。
你的结果看起来很好:
avg
然而,为此选择IP是相当随意的(SELECT min(dbo.Inv_AeX_AC_TCPIP.[IP Address]) AS IP, dbo.Inv_AeX_AC_TCPIP.[Host Name] AS Name
FROM dbo.Inv_AeX_AC_Identification
INNER JOIN dbo.Inv_AeX_AC_TCPIP
ON dbo.Inv_AeX_AC_Identification._ResourceGuid = dbo.Inv_AeX_AC_TCPIP._ResourceGuid
GROUP BY dbo.Inv_AeX_AC_TCPIP.[Host Name]
将进行字母排序)。在SQL Server和Oracle中,您可以定义用户定义的聚合函数以更好地选择要显示的内容,在MySQL中,您可以使用min
这样的内容,这可能完全符合您的需求。
答案 1 :(得分:0)
问题是你应该规定哪个"弗兰克的计算机"要包含的行。
"最小" IP?第一个插入?最后一个?
您可能希望使用GROUP BY
子句,但需要确定要用于ip列的聚合类型。 MIN()
,MAX()
?
如果你只想要"首先"一个回归,这是巧合......你想把你的结果与页面上的数据顺序结合起来吗?
答案 2 :(得分:-2)
SELECT DISTINCT dbo.Inv_AeX_AC_TCPIP.[IP Address], dbo.Inv_AeX_AC_TCPIP.[Host Name]
FROM dbo.Inv_AeX_AC_Identification INNER JOIN dbo.Inv_AeX_AC_TCPIP ON dbo.Inv_AeX_AC_Identification._ResourceGuid = dbo.Inv_AeX_AC_TCPIP._ResourceGuid
and dbo.Inv_AeX_AC_TCPIP.[Host Name] in (select top 1 dbo.Inv_AeX_AC_TCPIP from dbo.Inv_AeX_AC_Identification
INNER JOIN dbo.Inv_AeX_AC_TCPIP T ON dbo.Inv_AeX_AC_Identification._ResourceGuid = T._ResourceGuid and T.[IP Address] = dbo.Inv_AeX_AC_TCPIP.[IP Address])