【问题标题】:MS SQL query to pivot in same column with multiple valuesMS SQL查询以在具有多个值的同一列中进行透视
【发布时间】:2014-10-15 12:53:33
【问题描述】:

Table1有带货人员名单(A,B,C)

我想使用 SQL 查询显示有多少人拥有每种产品组合的记录。

请注意

1.产品未知,因此无法硬编码产品名称,表中可以有'n'个产品名称。

表 1

ID  Person  Product
-------------------
1   Jannet  A
2   Jannet  B
3   Ross    A
4   Jane    C
5   Jane    B
6   Jane    A
7   Jannet  A

需要输出:

Product     A   B   C
----------------------
A           0   2   1
B           2   0   1
C           1   1   0

【问题讨论】:

  • 解释你的结果?你的 RBDMS 是什么?
  • 您好,感谢您的回复。我正在使用 MYSQL,我期望的结果是,我想显示拥有每种产品组合的不同人的数量,例如。 Jannet & Jane 拥有产品 A 和 B ,因此在产品 A 和 B 下应该显示 2,因为 2 人拥有这种产品组合。
  • 所以结果总是沿对角线对称?
  • 是的,因为我们正在计算不同产品的人数,比如 Jannet 可能有 2 个 A 产品和 1 个 B 产品,而 Jane 有 1 个 A 产品和 1 个 B 产品,总数为产品 A 和 B 的客户将是 2(即上面示例中的 Jannet 和 Jane)

标签: sql sql-server tsql pivot multiple-columns


【解决方案1】:

试试这个:

SELECT  Product ,
        SUM(CASE WHEN productx = 'A' THEN 1 ELSE 0
            END) A ,
        SUM(CASE WHEN productx = 'B' THEN 1 ELSE 0
            END) B ,
        SUM(CASE WHEN productx = 'C' THEN 1 ELSE 0
            END) C
FROM    ( SELECT   DISTINCT  tb.Product product ,
                    tb2.Product productx ,
                    tb3.Person
          FROM      ( SELECT DISTINCT
                                Product
                      FROM      Remsys.TABLE_1
                    ) tb
                    CROSS JOIN ( SELECT DISTINCT
                                        Product
                                 FROM   Remsys.TABLE_1
                               ) tb2
                    INNER JOIN Remsys.TABLE_1 tb3
                    ON tb.Product = tb3.Product
                    INNER JOIN Remsys.TABLE_1 tb4
                    ON tb2.Product = tb4.Product
          WHERE     tb.product <> tb2.product
                    AND tb3.person = tb4.person
        ) otb
GROUP BY Product

【讨论】:

  • 感谢您的回复,但问题是,如果同一产品有同一个人的多条记录,它们也会被加起来。但我需要计算产品组合的不同人员。例如。在上面的示例中,如果 Jannet 对产品 A 多了一条记录,那么 A 和 B 的输出仍应显示为 2
  • 非常感谢!那行得通。但是如果产品未知怎么办,在这种情况下,我将无法在案例陈述中对它们进行硬编码。那么,如何让表格中的所有不同产品都适用呢?
  • 将此查询与动态 sql 一起使用 - 即选择不同的产品来构建查询字符串。看看动态 sql,如果你遇到困难,请告诉我......
  • 是的,我确实使用了动态 sql,但我想知道是否有更好的方法来获得它。但无论如何,再次感谢!
猜你喜欢
  • 2016-05-21
  • 1970-01-01
  • 1970-01-01
  • 2011-12-28
  • 1970-01-01
  • 2020-12-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多