SQL Group Count of Item以动态的Columns数量排序

Jon*_*nas 4 sql sql-server combinations

SQL Server 2012.我想知道是否有人能解决我的问题.

我想找到人们订购文章的所有不同组合.我不感兴趣,如果这个人买了A和B以及其他有序的B然后是A.我希望列的数量是动态的.订单具有的最大行数.

订单示例

Order   Row Art
1       1   A
1       2   B
1       3   C
2       1   A
2       2   B
3       1   C
3       2   D
4       1   A
4       2   B
5       1   B
5       2   A
Run Code Online (Sandbox Code Playgroud)

我想要的结果是这样的

Count   Art1    Art2    Art3
3       A       B   
1       C       D   
1       A       B       C
Run Code Online (Sandbox Code Playgroud)

Dhr*_*shi 5

这是一种方法:

  • 首先获取列中的所有产品(按订单方式)
  • 第二组将它们按此列进行计数
  • 作为列分开

以下是查询

--Create table t1 ([order] int, row int, art varchar(30))

--insert into t1 values 
--(1,1,'A'),
--(1,2,'B'),
--(1,3,'C'),
--(2,1,'A'),
--(2,2,'B'),
--(3,1,'C'),
--(3,2,'D'),
--(4,1,'A'),
--(4,2,'B'),
--(5,1,'B'),
--(5,2,'A')

    select 
        count(1) as [count], 
        articles,
        max(numberOfArticles) as numberOfArticles
    from 
    (
        select 
        [order],
        count(1) as numberOfArticles,
        Stuff(          
                (
                SELECT 
                    ',' + art 
                FROM t1 AS i
                WHERE i.[order]=o.[order]
                ORDER by art asc
                FOR XML PATH ('')
                ), 
            1, 1, '') as articles
        from t1 o
        group by [order]
    )t
    group by articles

--drop table t1
Run Code Online (Sandbox Code Playgroud)

输出: 在此输入图像描述