2

我正在编写一个程序来显示产品及其所在的商店。

到目前为止,我已经能够编写一个显示数据的 SQL 查询,如下所示:

Product    Availability
Milk       Store1
Candy      Store1
Eggs       Store1
Milk       Store2
Eggs       Store2
Candy      Store3
Eggs       Store3

是否有任何 SQL 查询可用于将产品分组到 Product 列,并将它们所在的商店扩展为 3 列,如下图所示?

Product  Store1  Store2  Store3
Milk     Yes     Yes     No
Candy    Yes     No      Yes
Eggs     Yes     Yes     Yes
4

4 回答 4

4
SELECT 
    Product,
    MAX(CASE WHEN Availability='Store1' THEN 'Yes' ELSE 'No' END) AS Store1,
    MAX(CASE WHEN Availability='Store2' THEN 'Yes' ELSE 'No' END) AS Store2,
    MAX(CASE WHEN Availability='Store3' THEN 'Yes' ELSE 'No' END) AS Store3
FROM YourTable
GROUP BY Product
于 2010-10-12T13:57:03.387 回答
3

一个很常见的问题。你需要知道的词是pivot。在 StackOverflow 中搜索“pivot”或“cross tab”以找到大量讨论和示例。

于 2010-10-12T13:56:35.683 回答
3

如今,大多数 RDBM 都支持枢轴。如果您指定了您正在使用的数据库,这将有很大帮助。一些例子:MSSQLpostgres (交叉表函数)等等。

于 2010-10-12T14:01:49.977 回答
1

假设您在运行查询之前不知道列名,这篇博客 提供了一个很好的解决方案(但要注意注入攻击)。

于 2010-10-12T14:01:32.707 回答