首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何为每个项目所属的组输出一列?

如何为每个项目所属的组输出一列?
EN

Stack Overflow用户
提问于 2009-06-16 00:07:20
回答 3查看 744关注 0票数 0
代码语言:javascript
复制
GroupId   Item
1         Fish
1         FishBowl
2         Fish
3         Fish

如何派生此输出?

代码语言:javascript
复制
Item     IsInGroup1   IsInGroup2   IsInGroup3
Fish     Y            Y            Y
FishBowl Y            N            N

请注意,组的数量可以是可变的

EN

回答 3

Stack Overflow用户

发布于 2009-06-16 00:29:13

通常,您不能使用标准SQL来处理数量可变的组。你必须事先知道这些组。这是因为任何SQL查询都必须知道列数及其名称。

代码语言:javascript
复制
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“的链接,剩下的交给你。

票数 2
EN

Stack Overflow用户

发布于 2009-06-16 00:56:43

SO上的most frequently asked questions之一。

基本上,您可以使用动态SQL通过确定组的数量和每个组的名称来构建Bill Karwin提供的形式的查询。您生成的这种查询可以是ANSI SQL。您还可以为Bill提到的SQL Server2008 (2005及更高版本)的PIVOT操作符生成专有语法。

我在first link上的例子应该很清楚。

票数 1
EN

Stack Overflow用户

发布于 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;

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/999067

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档