1
我有一個生產數據庫DataProd
與表IPSubnets
。該表僅由兩列組成:ID(此處未使用)和子網地址(IP_Subnets0
)。產生消息8120,級別16的東西函數
現在,我想將每個IP_Subnets0條目與它所在物理站點的名稱關聯起來。由於單個站點可以有多個子網,因此我還希望按照Site關聯的子網列表將結果分組。
我做什麼,到目前爲止是這樣的:
- 我已經開始用站點列表表的聲明,因爲我不能創建新的永久表到我的數據庫。您可以注意到Site3有兩個關聯的子網。
- 然後,我從
@SiteList
中選擇SiteName
並使用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
當我這樣做,我得到一個錯誤
消息8120,級別16 '@ SiteList.Subnet' 是在選擇列表中,因爲它無效不包含在聚合函數或GROUP BY子句中
上線在STUFF
內部的子句。
我不明白是什麼問題。我已經使用這個Stuff
部分類似(雖然不是像在這裏聲明的表,而是用數據庫中的實際表格),並且一切都很順利。
有什麼想法?
啊是啊,是我不好。我想知道我是怎麼結束的,我在這裏做了某種聚合。你會建議如何獲得我想要的結果(每個站點一行,每個關聯的子網連在一個列中)? – Tuttu
你需要調整where子句來看看sitename而不是子網 - 我會在一秒內更新答案 – Eli
@Tuttu我更新了查詢 - 讓我知道它是否適合你。 – Eli