patientno cardName cardtype
------------------------------
101 abc123 1001
102 wre234 1002
102 ioi123 1002
102 uio345 1003
103 opt123 1004
103 jhy126 1005
预期产出:
patientno cardname
-------------------------------
101 1001:abc123
102 1002:wre234,1002:ioi123,1003:uio345
103 1004:opt123,1005:jhy126
答案 0 :(得分:1)
Group_concat
中的{p> MySQL
在SQL Server
中不可用,直至当前版本。
你有一些手动选择:
1)构建一个标量函数,将患者姓名/ id作为参数,并显示连接的卡片名称/类型值,并将此功能应用于每个员工
2)使用xml函数
SELECT patientno, cardName = STUFF((SELECT
cardName + ':' + cardtype
FROM @x AS x2 WHERE patientno= x.patientno
ORDER BY row_num
FOR XML PATH('')), 1, 1, '')
FROM @x AS x
GROUP BY patientno
ORDER BY patientno;
注意强> 未经测试的查询可能会有一些语法错误。
您可以阅读有关Stuff
的更多信息答案 1 :(得分:1)
您可以创建一个stored procedure
,其中包含一个逐个检索patientno
的循环,cardName
和cardType
的相关数据可以通过{coalesce
和Create table #tmp(patientno int, cardName varchar(max));
declare @patientno int;
set @patientno= 0;
declare @cardName varchar(max);
Select @patientno=Min(patientno) From patientTable
Where patientno > @patientno
WHILE (@patientno is not null AND @patientno > 0) BEGIN
Select @cardName = coalesce(',', @cardName) + cardtype + ':' + cardName
from patientTable where patientno = @patientno
Insert into #tmp(patientno, cardName)Values(@patientno, @cardName);
--Fetch Next
Select @patientno=Min(patientno) From patientTable
Where patientno > @patientno
END
Select * From #tmp;
连接起来1}}功能。
{{1}}
这只是逻辑。您可以根据您的要求对其进行修改以使其正常工作。
答案 2 :(得分:1)
您需要构建一个代码来连接我的网站上的SQL字符串(see this article)。本教程介绍如何使用FOR XML PATH在SQL Server上连接字符串。请尝试以下SELECT语句
/*
create table PatientData (patientno int, cardName varchar(25), cardtype int)
go;
insert into PatientData select 101,'abc123',1001
insert into PatientData select 102,'wre234',1002
insert into PatientData select 102,'ioi123',1002
insert into PatientData select 102,'uio345',1003
insert into PatientData select 103,'opt123',1004
insert into PatientData select 103,'jhy126',1005
*/
with patients as (
select distinct patientno from PatientData
)
select
p.patientno,
STUFF(
(
SELECT ',' + cast(d.cardtype as varchar(10))+ ':' + d.cardName
FROM PatientData d
WHERE d.patientno = p.patientno
FOR XML PATH(''),TYPE
).value('.','VARCHAR(MAX)'
), 1, 1, '') as cardname
from patients p
输出如下所示
101 1001:abc123
102 1002:wre234,1002:ioi123,1003:uio345
103 1004:opt123,1005:jhy126