Как выбрать только один столбец - PullRequest
0 голосов
/ 25 апреля 2019

Я думаю, что это глупый вопрос, но я не нашел ответа.У меня есть очень простой запрос выбора, подобный этому:

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 ]

3 голосов
/ 25 апреля 2019

Если вы используете SQL Server 2017+, вы можете использовать STRING_AGG:

SELECT  STRING_AGG([column_name], ',')
  FROM  [sde].[SDE_column_registry]
  WHERE [table_name] LIKE 'TESTFEATURECLASS' AND
        [column_name] <> 'SHAPE'

Это выдаст:

GDB_GEOMATTR_DATA, myFieldText, OBJECTID
2 голосов
/ 25 апреля 2019

Вы можете комбинировать 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

Большой ресурс для изучения - статья Simple Talk по следующей ссылке Объединение значений строк в Transact-SQL

Решение отлично работает на SQL Server 2005+. Решение, предоставленное Мартином (это не мой псевдоним), является предпочтительным, если вы используете SQL Server 2017+.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...