我有一张只包含产品ID和类别ID的表(产品可以在多个类别中)。如何将类别ID展平到产品列中,所以我以此结束:
id | name | desc | categories 1 | test1 | lorem | 1,3,4,23 2 | test2 | ipsom | 4,6,24
就像我需要循环到类别列的单独表中一样。我该怎么办?或者有更好的方法吗?
在MSSQL中没有内置的方法可以做到这一点。
没有真正简单的方法可以做到这一点。但是,有很多想法。
我找到的最好的一个:
SELECT table_name, LEFT(column_names , LEN(column_names )-1) AS column_names FROM information_schema.columns AS extern CROSS APPLY ( SELECT column_name + ',' FROM information_schema.columns AS intern WHERE extern.table_name = intern.table_name FOR XML PATH('') ) pre_trimmed (column_names) GROUP BY table_name, column_names;
或一个版本,如果数据中可能包含以下字符,则该版本可以正常工作: <
WITH extern AS (SELECT DISTINCT table_name FROM INFORMATION_SCHEMA.COLUMNS) SELECT table_name, LEFT(y.column_names, LEN(y.column_names) - 1) AS column_names FROM extern CROSS APPLY (SELECT column_name + ',' FROM INFORMATION_SCHEMA.COLUMNS AS intern WHERE extern.table_name = intern.table_name FOR XML PATH(''), TYPE) x (column_names) CROSS APPLY (SELECT x.column_names.value('.', 'NVARCHAR(MAX)')) y(column_names)