... Во-первых я хотел бы создать заявление, которое превратило бы все строки в один большой массивный разделителями запятыми список.
DECLARE @tmp VarChar(max)
SET @tmp = ''
SELECT @tmp = @tmp + ColumnA + ',' FROM TableA
Затем используйте таблицу значной UDF разделить описываемое этим SO статьей, чтобы превратить эту массивную строку обратно в таблицу с отдельной статьей, чтобы убедиться, что оно уникально.
https://stackoverflow.com/a/2837662/261997
SELECT DISTINCT * FROM dbo.Split(',', @tmp)
Полный пример кода:
if object_id('dbo.Split') is not null
drop function dbo.Split
go
CREATE FUNCTION dbo.Split (@sep char(1), @s varchar(512))
RETURNS table
AS
RETURN (
WITH Pieces(pn, start, stop) AS (
SELECT 1, 1, CHARINDEX(@sep, @s)
UNION ALL
SELECT pn + 1, stop + 1, CHARINDEX(@sep, @s, stop + 1)
FROM Pieces
WHERE stop > 0
)
SELECT pn,
SUBSTRING(@s, start, CASE WHEN stop > 0 THEN stop-start ELSE 512 END) AS s
FROM Pieces
)
go
declare @t table (colA varchar(max))
insert @t select '111, 223'
union all select '333'
union all select '444'
union all select '777,999';
select ltrim(rtrim(s.s)) as colC
from @t t
cross apply
dbo.split(',', t.colA) s
Я думаю, что лучшим решением было бы назначить одну категорию в строке. Я предполагаю, что ваш 'cat' является varchar – mabe02
Я бы сказал, что неправильная структура таблицы. Никогда не помещайте несколько значений в одно поле. – Seb
Какое максимальное количество значений может быть в одном столбце? –