【发布时间】:2021-05-18 03:47:43
【问题描述】:
我想连接逗号分隔的字符串。我有一个查询,我在哪里使用该函数来获取员工。
目前,我使用[dbo].fn_fullname(A.REFNO) 作为员工来获取员工,但如果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, 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, ''),
1,
1,
'')
FROM dbo.v_carers_active proca (nolock)
WHERE refno = @refno
return @name
END
GO
这里是示例数据
| UniqueKey | Number | ReferenceIdentifier | StartDateTime | staff |
|---|---|---|---|---|
| 70DB83D1-2900-4CF1-9CC4-CA6948AC0E91 | A4286 | 2182823 | 2015-03-26 08:00:00.0000000 | Ms S Taylor |
| 310745CB-4724-4724-A5F0-7D9088317E58 | A4286 | 2182823 | 2015-03-26 08:00:00.0000000 | Ms D Kirkpatrick |
| CA6DDB25-AADD-4FC1-ABAA-2AF84016E6E5 | A4286 | 2182834 | 2015-03-19 08:00:00.0000000 | Ms D Kirkpatrick |
| 6A3C0A3B-EAA3-4523-B4FD-2882E2C02B4A | A4286 | 2182844 | 2015-03-30 08:00:00.0000000 | Mrs Nel McKinnon |
| 6399662A-EC4D-4993-8D4F-0BC396D12C2C | A4286 | 2182844 | 2015-03-30 08:00:00.0000000 | Ms Deb Kirkpatrick |
预期输出
| UniqueKey | Number | ReferenceIdentifier | StartDateTime | staff |
|---|---|---|---|---|
| 70DB83D1-2900-4CF1-9CC4-CA6948AC0E91 | A4286 | 2182823 | 2015-03-26 08:00:00.0000000 | Ms S Taylor,Ms D Kirkpatrick |
| CA6DDB25-AADD-4FC1-ABAA-2AF84016E6E5 | A4286 | 2182834 | 2015-03-19 08:00:00.0000000 | Ms D Kirkpatrick |
| 6A3C0A3B-EAA3-4523-B4FD-2882E2C02B4A | A4286 | 2182844 | 2015-03-30 08:00:00.0000000 | Mrs Nel McKinnon,Ms Deb Kirkpatrick |
【问题讨论】:
-
STUFF不连接。FOR XML PATH('')正在完成所有繁重的工作。STUFF只是删除了最后一个字符串的前导逗号。 -
这和你之前的问题一样,现在删除了。您需要改进上次要求的任何内容。
-
@DaleK,你能告诉我一种方法吗?我不明白。
-
@Damien_The_Unbeliever,你能告诉我它是如何实现的吗?
-
Ms D KirkpatrickUniqueKey of310745CB-4724-4724-A5F0-7D9088317E58发生了什么?
标签: sql-server tsql stuff