【发布时间】:2022-01-24 05:50:16
【问题描述】:
我有 3 个表,关系是 Policy (N) -> PolicyService
DXBusinessPolicy_Policy
| ID | Code | Name |
|---|---|---|
| 1 | COMBO.2103001 | [Giá nền] T9/2020 #1 |
| 2 | IPTV-0121.002 | [Giá nền] T8/2020 #1 |
| 3 | INT.2103001 | Chính sách 2 |
DXBusinessPolicy_Service
| ID | Code | Name |
|---|---|---|
| 1 | INT | Internet |
| 2 | IPTV | IPTV |
DXBusinessPolicy_PolicyService
| ID | PolicyID | ServiceID |
|---|---|---|
| 1 | 1 | 1 |
| 2 | 1 | 2 |
| 3 | 2 | 2 |
| 4 | 3 | 1 |
问题:输入服务(ServiceCode),输出为PolicyID、PolicyCode、PolicyName和该策略的服务列表(列表ServiceCode用“,”连接的字符串)。
例如:我的输入是:“INT”。 结果预期:
| PolicyCode | PolicyName | Services |
|---|---|---|
| COMBO.2103001 | [Giá nền] T9/2020 #1 | INT,IPTV |
| INT.2103001 | Chính sách 2 | INT |
我尝试如下解决这个问题:
ALTER PROC FindPolicyByService
@ServiceCode varchar(200)
AS
BEGIN
SELECT dbo.DXBusinessPolicy_Policy.ID AS PolicyID,
dbo.DXBusinessPolicy_Policy.Code AS PolicyCode,
dbo.DXBusinessPolicy_Policy.Name AS PolicyName,
STRING_AGG(dbo.DXBusinessPolicy_Service.Code, ',')
FROM dbo.DXBusinessPolicy_Policy
join dbo.DXBusinessPolicy_PolicyService ON dbo.DXBusinessPolicy_Policy.ID = dbo.DXBusinessPolicy_PolicyService.PolicyID
join dbo.DXBusinessPolicy_Service ON dbo.DXBusinessPolicy_PolicyService.ServiceID = dbo.DXBusinessPolicy_Service.ID
WHERE dbo.DXBusinessPolicy_Service.Code = @ServiceCode
GROUP by dbo.DXBusinessPolicy_Policy.ID, dbo.DXBusinessPolicy_Policy.Code, dbo.DXBusinessPolicy_Policy.Name
END
exec FindPolicyByService "INT"
但结果不是我所期望的
| PolicyCode | PolicyName | Services |
|---|---|---|
| COMBO.2103001 | [Giá nền] T9/2020 #1 | INT |
| INT.2103001 | Chính sách 2 | INT |
【问题讨论】:
-
@lptr 好答案,我认为如果您使用“DISTINCT”(SELECT DISTINCT subps.PolicyID)会更好
标签: sql sql-server tsql stored-procedures string-aggregation