连接子查询中的字符串

时间:2019-10-28 03:40:24

标签: sql-server tsql

我不知道如何连接子查询中的字符串。请注意-我的内部查询要复杂得多。我省略了较长的WHERE条件以使事情变得更简单-我需要从外部查询中进行选择。 这是问题所在-我设法从MEEV_NTO之外的所有列中进行选择-我需要连接此查询中的字符串,并用逗号分隔。

请注意-我也读过this-但它是从表中选择的,而不是从子查询中选择的。

我的查询如下:

SELECT DISTINCT MERC_KEY, MEEV_QUA_SUM, MEEV_NTO
FROM
(
    SELECT MERC_KEY, SUM(MEEV_QUA) OVER(PARTITION BY MERC_KEY) MEEV_QUA_SUM, MEEV_NTO FROM @tbl1
) A

所需的输出:

+----------+--------------+-----------------------------------+
| MERC_KEY | MEEV_QUA_SUM |             MEEV_NTO              |
+----------+--------------+-----------------------------------+
|        1 |           14 | FIRST TEST,SECOND TEST,THIRD TEST |
|        2 |            6 | ANOTHER, AND ANOTHER              |
+----------+--------------+-----------------------------------+

整个示例:

declare @tbl1 table
(
    MERC_KEY INT,   
    MEEV_QUA INT,
    MEEV_NTO VARCHAR(100)
)

INSERT @tbl1 (MERC_KEY, MEEV_QUA, MEEV_NTO)
VALUES(1, 4, 'FIRST TEST'),
(1, 3, 'SECOND TEST'),
(1, 7, 'THIRD TEST'),
(2, 2, 'ANOTHER'),
(2, 4, 'AND ANOTHER')

2 个答案:

答案 0 :(得分:2)

如果您使用的是SQL Server 2017或更高版本,则可以在此处使用STRING_AGG

SELECT
    MERC_KEY,
    SUM(MEEV_QUA) AS MEEV_QUA_SUM,
    STRING_AGG(MEEV_NTO, ',') MEEV_NTO
FROM @tbl1
GROUP BY
    MERC_KEY;

答案 1 :(得分:1)

您可以像表一样使用聚合函数进行子查询。但是在这种情况下,您可以将其用于@ tbl1,查询应如下所示:

SELECT DISTINCT MERC_KEY, MEEV_QUA_SUM, MEEV_NTO
FROM
(
    SELECT MERC_KEY, SUM(MEEV_QUA) OVER(PARTITION BY MERC_KEY) MEEV_QUA_SUM, STRING_AGG(MEEV_NTO,',') AS MEEV_NTO FROM @tbl1 GROUP BY MERC_KEY
) A

您告诉您,子查询要复杂得多,所以我保留了查询结构。