我有一个带有表DataProd
的生产数据库IPSubnets
。此表仅由两列组成: ID (此处未使用)和子网地址(IP_Subnets0
)。
现在,我想将每个IP_Subnets0条目与其所在的物理站点的名称相关联。由于单个站点可以有多个子网,我还希望按站点对结果进行分组,并附带关联子网的连接列表。
到目前为止我所做的是以下内容:
SiteName
中选择了@SiteList
,并使用Stuff
表现得像Group_Concat
那样IP_Subnets0
。Group By SiteName
。代码:
DECLARE @SiteList TABLE (SiteID Int Not Null Primary Key Identity(1,1),
SiteName VarChar(30),
Subnet VarChar(15)
)
INSERT INTO @SiteList
VALUES ('Site1', '192.168.10.0'), ('Site2', '192.168.20.0'),
('Site3', '192.168.30.0'), ('Site3', '192.168.40.0')
SELECT DISTINCT
SL.SiteName,
Subnets = STUFF((SELECT DISTINCT ','+ IP_Subnets0
FROM dbo.v_RA_System_IPSubnets
WHERE IP_Subnets0 = SL.Subnet
FOR XML PATH('')), 1, 1, '')
FROM
@SiteList SL
GROUP BY
SL.SiteName
当我这样做时,我收到错误
Msg 8120,等级16 ' @ SiteList.Subnet'在选择列表中无效,因为它不包含在聚合函数或GROUP BY子句
中
位于WHERE
内的STUFF
子句行。
我不明白问题所在。我已经类似地使用过这个Stuff
部分了(虽然没有像我在这里声明的那样表,而是使用数据库中的实际表),一切都很顺利。
有什么想法吗?
答案 0 :(得分:1)
您未在此处汇总任何数据 - 运行您的查询,没有最后一行 - 即删除GROUP BY
语句。
更新了查询
DECLARE @SiteList TABLE (SiteID Int Not Null Primary Key Identity(1,1),
SiteName VarChar(30),
Subnet VarChar(15)
)
INSERT INTO @SiteList
VALUES ('Site1', '192.168.10.0'), ('Site2', '192.168.20.0'),
('Site3', '192.168.30.0'), ('Site3', '192.168.40.0')
SELECT DISTINCT
SL.SiteName,
Subnets = STUFF((SELECT DISTINCT ','+ IP_Subnets0
FROM dbo.v_RA_System_IPSubnets
--WHERE IP_Subnets0 = SL.Subnet -- your where clause
WHERE SiteName = SL.SiteName -- you want to match on sitename
FOR XML PATH('')), 1, 1, '')
FROM
@SiteList SL