GroupId Item
1 Fish
1 FishBowl
2 Fish
3 Fish如何派生此输出?
Item IsInGroup1 IsInGroup2 IsInGroup3
Fish Y Y Y
FishBowl Y N N请注意,组的数量可以是可变的
发布于 2009-06-16 00:29:13
通常,您不能使用标准SQL来处理数量可变的组。你必须事先知道这些组。这是因为任何SQL查询都必须知道列数及其名称。
SELECT Item,
MAX(CASE GroupId WHEN 1 THEN 'Y' ELSE 'N' END) AS IsInGroup1,
MAX(CASE GroupId WHEN 2 THEN 'Y' ELSE 'N' END) AS IsInGroup2,
MAX(CASE GroupId WHEN 3 THEN 'Y' ELSE 'N' END) AS IsInGroup3
FROM ThisInputTable
GROUP BY Item;Microsoft SQL Server确实有一些用于透视表的工具,但这不是标准SQL。我不是微软用户,所以我会给你一个"Using PIVOT and UNPIVOT“的链接,剩下的交给你。
发布于 2009-06-16 00:56:43
SO上的most frequently asked questions之一。
基本上,您可以使用动态SQL通过确定组的数量和每个组的名称来构建Bill Karwin提供的形式的查询。您生成的这种查询可以是ANSI SQL。您还可以为Bill提到的SQL Server2008 (2005及更高版本)的PIVOT操作符生成专有语法。
我在first link上的例子应该很清楚。
发布于 2009-06-16 00:30:23
嗯,我想这取决于你使用的是哪个数据库。这对我来说很有效:
SELECT,IF(GroupId=1,'Y','N') As IsInGroup1,IF(GroupId=2,'Y','N') As IsInGroup2,IF(GroupId=3,'Y','N') As IsInGroup3 FROM New Table BY Item;
https://stackoverflow.com/questions/999067
复制相似问题