【发布时间】:2020-02-04 21:28:21
【问题描述】:
表格如下:
我试图让结果集包含与表相交的所有人的组,因此在附加表的结果集中创建以下组。
Person1, Person2, Person3, Person7, Person8
Person5, Person6, Person9
到目前为止,我有以下查询,但似乎无法将结果与行表相交并输出为 1 列。
DECLARE @r VARCHAR(MAX), @n INT, @i INT
SELECT @i = 1,
@r = 'SELECT BOX, ' + CHAR(13),
@n = (SELECT TOP 1 COUNT( USERS )
FROM EXCHANGE
GROUP BY BOX
ORDER BY COUNT( USERS ) DESC ) ;
WHILE @i <= @n BEGIN
SET @r = @r +
CASE WHEN @i = 1
THEN 'MAX( CASE Seq WHEN ' + CAST( @i AS VARCHAR ) + '
THEN USERS
ELSE SPACE(0) END ) + ' + CHAR(13)
WHEN @i = @n
THEN 'MAX( CASE Seq WHEN ' + CAST( @i AS VARCHAR ) + '
THEN '', '' + USERS
ELSE SPACE(0) END ) ' + CHAR(13)
ELSE 'MAX( CASE Seq WHEN ' + CAST( @i AS VARCHAR ) + '
THEN '', '' + USERS
ELSE SPACE(0) END ) + ' + CHAR(13)
END ;
SET @i = @i + 1 ;
END
SET @r = @r + '
FROM ( SELECT BOX, USERS,
ROW_NUMBER() OVER ( PARTITION BY BOX ORDER BY USERS )
FROM EXCHANGE p ) D ( BOX, USERS, Seq )
GROUP BY BOX;'
EXEC( @r ) ;
【问题讨论】:
-
SQL Server 2016
-
。 .仔细查看数据,我发现行不是对称的。你有
'Person1', 'Person2'但没有'Person2', 'Person1'是什么意思? -
是的,三分之二的可能是数据中来自USERS列的数据在BOX列中,然后再次对于来自BOX列的相同数据数据对应于USERS列中的多个其他值。
标签: sql sql-server group-by common-table-expression