问题描述
当我运行不同的查询时,我得到的结果是我期望的:
SELECT disTINCT [tblMSC_Notes].[display]
FROM [tblMSC_Notes]
INNER JOIN [tblUnits_Notes] ON [tblUnits_Notes].[NotesID] = [tblMSC_Notes].[NoteID]
WHERE (([tblMSC_Notes].[display] IS NOT NULL) AND ([tblUnits_Notes].[UnitID] = 15))
ORDER BY [tblMSC_Notes].[display]
显示的行:
♦
ML
No Cloak
我现在要执行的操作是将“显示器”输出为单个字段“♦,ML,无遮罩”
BEGIN
-- Declare the return variable here
DECLARE @Result nvarchar(Max)
SET @Result = ''
WITH display_CTE (display)
AS
(
SELECT disTINCT [tblMSC_Notes].[display]
FROM [tblMSC_Notes]
INNER JOIN [tblUnits_Notes] ON [tblUnits_Notes].[NotesID] = [tblMSC_Notes].[NoteID]
WHERE (([tblMSC_Notes].[display] IS NOT NULL) AND ([tblUnits_Notes].[UnitID] = @UnitID))
ORDER BY [tblMSC_Notes].[display]
)
SET @Result = (SELECT COALESCE(@Result + ',','') as displayResult
FROM (
SELECT [tblMSC_Notes].[display]
FROM [tblMSC_Notes]
WHERE [display] IN (SELECT display FROM display_CTE)
ORDER BY [tblMSC_Notes].[display]
)
)
-- Return the result of the function
RETURN @Result
END
这是tblMSC_Notes表中的一些示例数据:
ID UnitID NotesID
1 1513 154
2 1513 154
3 5032 152
4 5032 155
5 5033 152
6 5033 155
7 5033 43
8 5034 43
9 5034 152
10 5034 155
11 5035 152
12 5035 155
13 5035 43
这里使用注释ID进行加入
ID UnitID NotesID display
1 1513 154 LB
2 1513 154 LB
3 5032 152 AL
4 5032 155 PL
5 5033 152 AL
6 5033 155 PL
7 5033 43 N
8 5034 43 N
9 5034 152 AL
10 5034 155 PL
Mohd-感谢您的帮助,所以我只需要将create函数更改为:
CREATE FUNCTION [dbo].[fnAnnex03_MasterShipChart_Notes] (
-- Add the parameters for the function here
@UnitID int
)
RETURNS nvarchar(Max)
AS
BEGIN
-- Declare the return variable here
DECLARE @Result nvarchar(Max)
SET @Result = ''
SET @Result = (SELECT string_agg(disTINCT [tblMSC_Notes].[display],') FROM [tblMSC_Notes] INNER JOIN [tblUnits_Notes] ON [tblUnits_Notes].[NotesID] = [tblMSC_Notes].[NoteID] WHERE (([tblMSC_Notes].[display] IS NOT NULL) AND ([tblUnits_Notes].[UnitID] = @UnitID)) ORDER BY [tblMSC_Notes].[display])
-- Return the result of the function
RETURN @Result
END
GO
解决方法
您能否为此示例提供一个包含数据的字段。
您只需要在此查询中使用string_agg,如下所示:
SELECT string_agg(DISTINCT [tblMSC_Notes].[Display],',')
FROM [tblMSC_Notes]
INNER JOIN [tblUnits_Notes] ON [tblUnits_Notes].[NotesID] = [tblMSC_Notes].[NoteID]
WHERE (([tblMSC_Notes].[Display] IS NOT NULL) AND ([tblUnits_Notes].[UnitID] = @UnitID))
ORDER BY [tblMSC_Notes].[Display]