как преобразовать значения столбцов в разделенные запятыми значения строк - PullRequest
0 голосов
/ 23 февраля 2011

У меня есть таблица со значениями как

FKTABLE_NAME               FKCOLUMN_NAME               PKCOLUMN_NAME
table1                     column1                        column1
table1                     column2                        column2
table2                     column1                        column1
table2                     column2                        column2

Как мне преобразовать это в

FKTABLE_NAME               FKCOLUMN_NAME               PKCOLUMN_NAME

tablel1                    column1,column2                column1,column2
table12                    column1,column2                column1,column2

В основном я пытаюсь получить группу столбцов, разделенных запятыми, по таблицеимя.

спасибо

Ответы [ 4 ]

3 голосов
/ 23 февраля 2011

Вот рабочий запрос на любой дБ

select distinct table_name,
  stuff((select ','+data_type
   from information_schema.columns b
   where b.table_name=a.table_name
   for xml path(''),type).value('.[1]','nvarchar(max)'),1,1,'') AS data_types,
  stuff((select ','+column_name
   from information_schema.columns b
   where b.table_name=a.table_name
   for xml path(''),type).value('.[1]','nvarchar(max)'),1,1,'') AS column_names
from information_schema.columns a

А вот ваш запрос

select distinct FKTABLE_NAME,
  stuff((select ','+FKCOLUMN_NAME
   from tbl b
   where b.FKTABLE_NAME=a.FKTABLE_NAME
   for xml path(''),type).value('.[1]','nvarchar(max)'),1,1,'') AS FKCOLUMN_NAMES,
  stuff((select ','+PKCOLUMN_NAME
   from tbl b
   where b.FKTABLE_NAME=a.FKTABLE_NAME
   for xml path(''),type).value('.[1]','nvarchar(max)'),1,1,'') AS PKCOLUMN_NAMES
from tbl a
0 голосов
/ 17 мая 2012

Ниже оператор SQL используется для преобразования данных одного столбца в одну строку:

declare @testdata varchar(8000)
set @testdata=''

select @testdata=@testdata+NAME+', ' from User where ID in('1','2','3','4','5')
print @testdata

select substring(@testdata,0,len(@testdata))

В приведенном выше примере:

  • Пользователь - таблица
  • NAME - это столбец пользователя, данные которого будут отображаться в строке
  • ID - это столбец пользователя

Для справки см. Ссылку ниже:

http://www.thedevheaven.com/2012/02/column-data-in-to-single-row-with-comma.html

0 голосов
/ 23 февраля 2011

Как и в случае всех проблем с агрегированием строк, я советую написать собственный агрегат (и я НАСТОЯТЕЛЬНО советую использовать агрегат clr для лучшей производительности) и написать такой запрос

select fktablename, stringAggregate(fkcolumnname), stringAggregate(pkcolumnname)
group by 
fktablename

несколько советов здесь

прочее приятное чтение

0 голосов
/ 23 февраля 2011
SELECT [Col1Name] + ',' + [Col2Name] + ',' ... + [ColNName]
FROM [tableName]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...