MATRIX2STRING
Updated 2023-10-19 13:54:51.110000
Syntax
SELECT [westclintech].[wct].[MATRIX2STRING](
<@Matrix_TableName, nvarchar(max),>
,<@ColumnNames, nvarchar(4000),>
,<@GroupedColumnName, nvarchar(4000),>
,<@GroupedColumnValue, sql_variant,>)
Description
Use the scalar function MATRIX2STRING to turn table data into a string representation of a matrix, where the columns are separated by commas and the rows are separated by semi-colons.
Arguments
@ColumnNames
the name, as text, of the columns in the table or view specified by @TableName that contains the array values to be used in the MATRIX2STRING formatting. Data returned from the @ColumnNames must be of the type float or of a type that implicitly converts to float.
@GroupedColumnName
the name, as text, of the column in the table or view specified by @TableName which will be used for grouping the results.
@Matrix_TableName
the name, as text, of the table or view that contains the values in the array to be used in the MATRIX2STRING formatting.
@GroupedColumnValue
the column value to do the grouping on.
Return Type
nvarchar(max)
Remarks
To convert normalized data to a string format, use the NMatrix2String or the NMatrix2String_q function.
For more complex queries, consider using the MATRIX2STRING_q function.
For larger datasets, it is better to use the MATRIX2STRING_q function so that you can specify an ordering column(s). There is no guarantee that in a large dataset, MATRIX2STRING will put the matrix in row order.
Examples
The following query populates a temp table, ‘#m’, with a 10-by-6 matrix of values.
SELECT *
INTO #m
FROM
(
SELECT -79,
-45,
9,
9,
-91,
-5
UNION ALL
SELECT 68,
46,
9,
81,
-61,
35
UNION ALL
SELECT 83,
-25,
80,
-67,
-22,
-38
UNION ALL
SELECT 77,
40,
-24,
69,
73,
-20
UNION ALL
SELECT -17,
-72,
-9,
-72,
-6,
-34
UNION ALL
SELECT 64,
-47,
48,
-54,
18,
11
UNION ALL
SELECT -4,
-36,
7,
-56,
-34,
-3
UNION ALL
SELECT -41,
90,
78,
-43,
38,
64
UNION ALL
SELECT -60,
-85,
-31,
-83,
-96,
-36
UNION ALL
SELECT -40,
31,
-93,
-62,
64,
10
) n(x0, x1, x2, x3, x4, x5);
We can enter the following SQL to turn this data into a formatted string representation of the matrix.
SELECT wct.MATRIX2STRING('#m', '*', '', NULL) as MATRIX;
This produces the following result.
{"columns":[{"field":"MATRIX"}],"rows":[{"MATRIX":"-79,-45,9,9,-91,-5;68,46,9,81,-61,35;83,-25,80,-67,-22,-38;77,40,-24,69,73,-2"}]}
Since the only rows in the table were for the matrix that we want to format, there was no need to specify a value for @GroupedColumnName , as there was no grouping required. This is also why the @GroupedColumnValue is NULL.
In this example, we will expand the number of columns in the matrix to include a matrix and a row number.
SELECT *
INTO #m
FROM
(
SELECT 'L1',
0,
-79,
-45,
9,
9,
-91,
-5
UNION ALL
SELECT 'L1',
1,
68,
46,
9,
81,
-61,
35
UNION ALL
SELECT 'L1',
2,
83,
-25,
80,
-67,
-22,
-38
UNION ALL
SELECT 'L1',
3,
77,
40,
-24,
69,
73,
-20
UNION ALL
SELECT 'L1',
4,
-17,
-72,
-9,
-72,
-6,
-34
UNION ALL
SELECT 'L1',
5,
64,
-47,
48,
-54,
18,
11
UNION ALL
SELECT 'L1',
6,
-4,
-36,
7,
-56,
-34,
-3
UNION ALL
SELECT 'L1',
7,
-41,
90,
78,
-43,
38,
64
UNION ALL
SELECT 'L1',
8,
-60,
-85,
-31,
-83,
-96,
-36
UNION ALL
SELECT 'L1',
9,
-40,
31,
-93,
-62,
64,
10
UNION ALL
SELECT 'L2',
0,
-6,
44,
-37,
36,
16,
-34
UNION ALL
SELECT 'L2',
1,
-28,
11,
-95,
29,
-70,
-37
UNION ALL
SELECT 'L2',
2,
58,
89,
-85,
-31,
85,
-84
UNION ALL
SELECT 'L2',
3,
86,
-85,
-48,
-74,
-5,
-32
UNION ALL
SELECT 'L2',
4,
7,
56,
-72,
-76,
-42,
-85
UNION ALL
SELECT 'L2',
5,
-84,
-60,
48,
-15,
-95,
9
UNION ALL
SELECT 'L2',
6,
72,
-22,
-56,
-45,
76,
-83
UNION ALL
SELECT 'L2',
7,
21,
66,
60,
67,
-38,
-99
UNION ALL
SELECT 'L2',
8,
60,
54,
56,
-79,
35,
-65
UNION ALL
SELECT 'L2',
9,
1,
-58,
43,
-95,
68,
-89
UNION ALL
SELECT 'L3',
0,
-70,
73,
0,
23,
22,
72
UNION ALL
SELECT 'L3',
1,
-80,
-6,
-66,
-17,
-30,
50
UNION ALL
SELECT 'L3',
2,
-88,
69,
78,
-60,
32,
-56
UNION ALL
SELECT 'L3',
3,
52,
-18,
21,
-54,
-27,
-82
UNION ALL
SELECT 'L3',
4,
97,
63,
5,
13,
5,
34
UNION ALL
SELECT 'L3',
5,
20,
100,
-71,
42,
-67,
32
UNION ALL
SELECT 'L3',
6,
-39,
34,
29,
47,
-59,
6
UNION ALL
SELECT 'L3',
7,
17,
24,
-32,
0,
-11,
58
UNION ALL
SELECT 'L3',
8,
-75,
-19,
49,
-66,
2,
15
UNION ALL
SELECT 'L3',
9,
44,
-74,
79,
1,
-56,
76
) n(m, r, x0, x1, x2, x3, x4, x5);
Here we will format a string for the Matrix L3.
SELECT wct.MATRIX2STRING('#m', 'x0,x1,x2,x3,x4,x5', 'm', 'L3') as MATRIX;
This produces the following result.
{"columns":[{"field":"MATRIX"}],"rows":[{"MATRIX":"-70,73,0,23,22,72;-80,-6,-66,-17,-30,50;-88,69,78,-60,32,-56;52,-18,21,-54,-2"}]}
In this select, we will format all the matrices and group them together by matrix name.
SELECT n.m,
wct.MATRIX2STRING('#m', 'x0,x1,x2,x3,x4,x5', 'm', n.m) as MATRIX
FROM
(SELECT DISTINCT m from #m) n(m);
This produces the following result.
{"columns":[{"field":"m"},{"field":"MATRIX"}],"rows":[{"m":"L1","MATRIX":"-79,-45,9,9,-91,-5;68,46,9,81,-61,35;83,-25,80,-67,-22,-38;77,40,-24,69,73,-20;-17,-72,-9,-72,-6,-34;64,-47,48,-54,18,11;-4,-36,7,-56,-34,-3;-41,90,78,-43,38,64;-60,-85,-31,-83,-96,-36;-40,31,-93,-62,64,10"},{"m":"L2","MATRIX":"-6,44,-37,36,16,-34;-28,11,-95,29,-70,-37;58,89,-85,-31,85,-84;86,-85,-48,-74,-5,-32;7,56,-72,-76,-42,-85;-84,-60,48,-15,-95,9;72,-22,-56,-45,76,-83;21,66,60,67,-38,-99;60,54,56,-79,35,-65;1,-58,43,-95,68,-89"},{"m":"L3","MATRIX":"-70,73,0,23,22,72;-80,-6,-66,-17,-30,50;-88,69,78,-60,32,-56;52,-18,21,-54,-27,-82;97,63,5,13,5,34;20,100,-71,42,-67,32;-39,34,29,47,-59,6;17,24,-32,0,-11,58;-75,-19,49,-66,2,15;44,-74,79,1,-56,76"}]}