На основании значений идентификаторов, как найти столбцы, которые имеют значения для идентификатора в таблице? - PullRequest
0 голосов
/ 08 июля 2019

У меня есть таблица, в которой есть столбец идентификаторов.Для каждого идентификатора другие столбцы будут иметь значение 0 или 1.Мне нужно найти, сколько столбцов имеют 1 и перечислить их в виде строки через запятую.

Это моя таблица

ID  T1  T2  T3
1   1    0  0
2   0    1  1
3   1    1  1

Ожидаемый результат

ID   1      2       3-- COLUMNS 
1    t1     t2,t3   t1,t2,t3

в столбце 1, значение должно быть "t1", так как t1 имеет значение "1"

в столбце 2 значение должно быть "t2, t3", поскольку t2, t3 имеет значение "1"

в столбце 3, значение должно быть "t1, t2, t3", посколькуt1, t2, t3 имели значение '1'

Любая помощь, как добиться этого выхода?

Заранее спасибо.

Ответы [ 3 ]

0 голосов
/ 08 июля 2019

Если вы ищете простую функцию для включения вашей задачи, экспортируйте файл с SQL Server в виде файла .csv, а затем примените функцию сцепления на стороне Excel.

= CONCATENATE (A1, ",", B1)

На стороне SQL, CONCAT (строка1, строка2, ...., строка_n)

0 голосов
/ 15 июля 2019

Спасибо всем за помощь.

Мне удалось получить требуемый результат из приведенного ниже кода.Но тот, который выложил @Christoph, намного проще, чем мой.

В любом случае, опубликовать мой подход, как показано ниже.

select u.ID, u.Columns1, u.values1 into #temptable from ColumnsAsValues s

unpivot
(
  values1
  for Columns1 in (t1,t2,t3,t4)
) u;



SELECT DISTINCT MC2.ID, 
            (
                SELECT STUFF((SELECT ',' + MC1.Columns1  AS [text()] 
                FROM #temptable MC1
                WHERE MC1.ID = MC2.ID and values1=1
                ORDER BY MC1.ID
                FOR XML PATH (''),type).value('.', 'NVARCHAR(MAX)'),1,1,'')
            ) [ColumnsWith1]
            INTO #CommaSeparatedString
            FROM #temptable MC2



            select * from 
            ( select id , [ColumnsWith1] from 
            #CommaSeparatedString ) datatable pivot (max(ColumnsWith1) for id in ([1],[2],[3]))piv;
0 голосов
/ 08 июля 2019
WITH T AS (
  SELECT ID, CASE WHEN T1 = 0 THEN NULL ELSE 'T1' END AS T1, CASE WHEN T2 = 0 THEN NULL ELSE 'T2' END AS T2, CASE WHEN T3 = 0 THEN NULL ELSE 'T3' END AS T3 FROM Foo 
)
SELECT ID, SUBSTRING(CONCAT(', ' + T1, ', ' + T2, ', ' + T3), 3, 100) AS Result FROM T

Первый выбор преобразует столбцы в их имена или NULL, второй объединяет их в список, разделенный запятыми (+ пробел).

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