如何解决使用 STUFF
我想连接逗号分隔的字符串。我有一个查询,我在哪里使用该函数来获取员工。
目前,我使用 [dbo].fn_fullname(A.REFNO
) 作为 Staff 来获取员工,但如果 cast(S.SCH_NO as varchar) as ReferenceIdentifier
的计数大于 1,我想包含一些条件,然后连接该值。但不确定如何在视图本身内部实现。
这里我尝试使用 STUFF
进行连接。
这是查询:
Alter View vw_TestDB
AS
select
NEWID() as UniqueKey,P.ID as Number,cast(S.SCH_NO as varchar) as ReferenceIdentifier,cast(S.START_D as datetime2) as StartDateTime,staff = STUFF((
SELECT ',' + [dbo].fn_fullname(A.REFNO)
FROM [dbo].[vw_TESTDB]
FOR XML PATH('')
),1,'')
FROM [dbo].[vw_TestDB]
group by ReferenceIdentifier
having count(ReferenceIdentifier)>1,[dbo].fn_fullname(A.REFNO) as Staff,from [dbo].V_SCHEDULES S WITH (NOLOCK)
inner join [dbo].V_PAT P WITH (NOLOCK) on P.PAT_REFNO = S.PAT_REFNO
这里的功能:
ALTER FUNCTION [dbo].[fn_fullname]
(
@refno as numeric(10,0)
)
RETURNS varchar(100)
AS
BEGIN
DECLARE @name as varchar(100)
SELECT @name = Stuff(Coalesce(' ' +
CASE
WHEN proca.TITLE_REFNO = 3104
THEN NULL
ELSE
NullIf(dbo.fn_rfval(proca.TITLE_REFNO),'')
END,'') +
Coalesce(' ' + proca.forename,'') +
Coalesce(' ' + proca.surname,''),'')
FROM dbo.v_carers_active proca (nolock)
WHERE refno = @refno
return @name
END
GO
这里是示例数据
唯一键 | 数量 | 参考标识符 | 开始日期时间 | 员工 |
---|---|---|---|---|
70DB83D1-2900-4CF1-9CC4-CA6948AC0E91 | A4286 | 2182823 | 2015-03-26 08:00:00.0000000 | S 泰勒女士 |
310745CB-4724-4724-A5F0-7D9088317E58 | A4286 | 2182823 | 2015-03-26 08:00:00.0000000 | D 柯克帕特里克女士 |
CA6DDB25-AADD-4FC1-ABAA-2AF84016E6E5 | A4286 | 2182834 | 2015-03-19 08:00:00.0000000 | D 柯克帕特里克女士 |
6A3C0A3B-EAA3-4523-B4FD-2882E2C02B4A | A4286 | 2182844 | 2015-03-30 08:00:00.0000000 | 内尔·麦金农夫人 |
6399662A-EC4D-4993-8D4F-0BC396D12C2C | A4286 | 2182844 | 2015-03-30 08:00:00.0000000 | Deb Kirkpatrick 女士 |
预期输出
唯一键 | 数量 | 参考标识符 | 开始日期时间 | 员工 |
---|---|---|---|---|
70DB83D1-2900-4CF1-9CC4-CA6948AC0E91 | A4286 | 2182823 | 2015-03-26 08:00:00.0000000 | S 泰勒女士、D 柯克帕特里克女士 |
CA6DDB25-AADD-4FC1-ABAA-2AF84016E6E5 | A4286 | 2182834 | 2015-03-19 08:00:00.0000000 | D 柯克帕特里克女士 |
6A3C0A3B-EAA3-4523-B4FD-2882E2C02B4A | A4286 | 2182844 | 2015-03-30 08:00:00.0000000 | Nel McKinnon 女士、Deb Kirkpatrick 女士 |
解决方法
不太明白你想要什么。根据示例数据和预期输出,您似乎想要
SELECT t.[Number],t.[ReferenceIdentifier],t.[StartDatetime],STUFF (
(SELECT ',' + [dbo].fn_fullname(x.REFNO)
FROM yourtable AS x
WHERE x.[Number] = t.[Number]
AND x.[ReferenceIdentifier] = t.[ReferenceIdentifier]
AND x.[StartDatetime] = t.[StartDatetime]
FOR XML PATH('')),1,'') AS Staff
FROM yourtable t
GROUP BY t.[Number],t.[StartDatetime]
HAVING COUNT(*) > 1
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。