Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sql-server-2005/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Tsql 如何在每个唯一标识符的一个字段中插入一列字符串?_Tsql_Sql Server 2005 - Fatal编程技术网

Tsql 如何在每个唯一标识符的一个字段中插入一列字符串?

Tsql 如何在每个唯一标识符的一个字段中插入一列字符串?,tsql,sql-server-2005,Tsql,Sql Server 2005,如果我的文字没有对齐,我会附加屏幕截图: 我有一张有客户id和多行药物的桌子。我想将每个客户的所有药物插入到一个逗号分隔的字段中 我的桌子看起来像这样: =================== |Client__ID|DESC | |==========|=======| |500011 |Plavix | |----------|-------| |500011 |Zocor | |----------|-------| |500011 |aspirin| |-----

如果我的文字没有对齐,我会附加屏幕截图:

我有一张有客户id和多行药物的桌子。我想将每个客户的所有药物插入到一个逗号分隔的字段中

我的桌子看起来像这样:

===================
|Client__ID|DESC   |
|==========|=======|
|500011    |Plavix |
|----------|-------|
|500011    |Zocor  |
|----------|-------|
|500011    |aspirin|
|----------|-------|
|500006    |aspirin|
|----------|-------|
|500006    |Plavix |
|----------|-------|
|500006    |Zocor  |
|----------|-------|
===================
========================================
|Client__ID|DESC   |MEDS_COMB           |
|==========|=======|====================|
|500011    |aspirin|Plavix,Zocor,aspirin|
|----------|-------|--------------------|
|500006    |aspirin|Plavix,Zocor,aspirin|
|----------|-------|--------------------|
========================================
========================================
|Client__ID|DESC   |MEDS_COMB           |
|==========|=======|====================|
|500011    |aspirin|NULL                |
|----------|-------|--------------------|
|500006    |aspirin|NULL                |
|----------|-------|--------------------|
========================================
我想要的输出如下所示:

===================
|Client__ID|DESC   |
|==========|=======|
|500011    |Plavix |
|----------|-------|
|500011    |Zocor  |
|----------|-------|
|500011    |aspirin|
|----------|-------|
|500006    |aspirin|
|----------|-------|
|500006    |Plavix |
|----------|-------|
|500006    |Zocor  |
|----------|-------|
===================
========================================
|Client__ID|DESC   |MEDS_COMB           |
|==========|=======|====================|
|500011    |aspirin|Plavix,Zocor,aspirin|
|----------|-------|--------------------|
|500006    |aspirin|Plavix,Zocor,aspirin|
|----------|-------|--------------------|
========================================
========================================
|Client__ID|DESC   |MEDS_COMB           |
|==========|=======|====================|
|500011    |aspirin|NULL                |
|----------|-------|--------------------|
|500006    |aspirin|NULL                |
|----------|-------|--------------------|
========================================
我的实际结果如下所示:

===================
|Client__ID|DESC   |
|==========|=======|
|500011    |Plavix |
|----------|-------|
|500011    |Zocor  |
|----------|-------|
|500011    |aspirin|
|----------|-------|
|500006    |aspirin|
|----------|-------|
|500006    |Plavix |
|----------|-------|
|500006    |Zocor  |
|----------|-------|
===================
========================================
|Client__ID|DESC   |MEDS_COMB           |
|==========|=======|====================|
|500011    |aspirin|Plavix,Zocor,aspirin|
|----------|-------|--------------------|
|500006    |aspirin|Plavix,Zocor,aspirin|
|----------|-------|--------------------|
========================================
========================================
|Client__ID|DESC   |MEDS_COMB           |
|==========|=======|====================|
|500011    |aspirin|NULL                |
|----------|-------|--------------------|
|500006    |aspirin|NULL                |
|----------|-------|--------------------|
========================================
这是我到目前为止写的查询:

SELECT [CLIENT_ID]
 , [DESC]
 , (STUFF((SELECT CAST(',' + [DESC] AS VARCHAR(MAX)) 
FROM [AZCLMED]
WHERE (CLIENT_ID = [AZCLMED].CLIENT_ID) AND END_DATE IS NULL
         FOR XML PATH ('')), 1, 2, '')) AS MEDS_COMB
FROM [AZCLMED]
ORDER BY [CLIENT_ID] ASC

XML路径(“”)
的语法已关闭,这是问题的一部分

我也不明白您想对
[Desc]
列做什么

获得您想要的结果非常简单:

DECLARE @TABLE TABLE (Client__ID INT, [Desc] VARCHAR(55));
INSERT INTO @TABLE VALUES (500011, 'Plavix');
INSERT INTO @TABLE VALUES (500011, 'Zocor');
INSERT INTO @TABLE VALUES (500011, 'Aspirin');
INSERT INTO @TABLE VALUES (500006, 'Aspirin');
INSERT INTO @TABLE VALUES (500006, 'Plavix');
INSERT INTO @TABLE VALUES (500006, 'Zocor');

SELECT 
     [CLIENT__ID]
    ,MIN([DESC])
    ,SUBSTRING(
        (
        SELECT ',' + [Desc]
        FROM @TABLE T2
        WHERE T2.Client__ID = T1.Client__ID
        ORDER BY [Desc]
        FOR XML PATH('')
        )
    ,2,100) AS MEDS_COMB
FROM @TABLE T1
GROUP BY T1.Client__ID
;

然而,我对
MIN([DESC])
选择感到有点不确定,因为它似乎是任意的。如果为本专栏选择此值背后有某种逻辑,请与我分享;我在您最初的查询中没有看到它。

我发布的表和结果只是数据的一个示例。我的实际表中有100000条记录。你的询问很有效。如何将其应用于更大的表?查询应在具有选定列的任何表上运行相同的查询。从
SUBSTRING(
MEDS\u COMB
的所有内容似乎都是您最感兴趣的。您希望如何制定行有什么特殊的逻辑吗?正如我所说的,
MIN()
对我来说似乎有点武断。如果你想让我给出比我已有的更详细的答案,我需要更多关于你拥有/想要的实际数据的信息。@Chris,你说,“你的查询很有效”。然后,请您接受这个答案,不要带着答案走开。StackOverflow的工作原理是当人们对彼此的时间和努力表示感谢时。谢谢