如何只选择一列

时间:2019-04-25 16:04:44

标签: sql-server select

我认为这是一个愚蠢的问题,但我没有找到任何答案。 我有一个非常简单的选择查询,例如:

select [column_name], [table_name] from [sde].[SDE_column_registry]
where [table_name] like 'TESTFEATURECLASS' and [column_name] <> 'SHAPE'

答案是:

column_name         table_name
-----------         ------------
GDB_GEOMATTR_DATA   TESTFEATURECLASS
myFieldText         TESTFEATURECLASS
OBJECTID            TESTFEATURECLASS

但是我只希望第一列连接成一行:

GDB_GEOMATTR_DATA,myFieldText,OBJECTID

我该如何做所有这些“简单”的事情?

2 个答案:

答案 0 :(得分:2)

如果您使用的是SQL Server 2017+,则可以使用WebMvcConfigurerAdapter

@Configuration
public WebConfig implements WebMvcConfigurer {
    // ...
}

这将输出:

STRING_AGG

答案 1 :(得分:1)

您可以将STUFF与XML PATH结合使用。 例如,如果我们将您的请求应用于AdventureWorks数据库,并且假设我们要显示名称中包含“ Person”的表的列,但“ BusinessEntityId”列除外,我们可以使用以下T-SQL代码段。

SELECT t1.name, 
(
    SELECT STUFF(C.name, 1, 0, '') + ' '
    FROM sys.columns c
         INNER JOIN sys.tables t ON c.object_id = t.object_id
    WHERE t.object_id = t1.object_id AND c.name <> 'BusinessEntityId'
    FOR XML PATH('')
) AS COLUMNLIST
FROM sys.tables t1
WHERE t1.name LIKE '%person%';

基本上,它与您的示例相同。您的示例更加简单。 在AdventureWorks数据库中,有五个这样的表,查询结果如下图所示。

enter image description here

以下链接Concatenating Row Values in Transact-SQL

上的“简单谈话”文章是探索的绝佳资源。

该解决方案在SQL Server 2005+上运行良好。如果使用SQL Server 2017+,则首选Martin提供的解决方案(不是我的别名)。