首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >SQL查询-沿着数据透视表的路线

SQL查询-沿着数据透视表的路线
EN

Stack Overflow用户
提问于 2009-04-07 14:51:33
回答 4查看 803关注 0票数 0

我有一个模拟的sql查询,将代表一个真正的sql查询。

代码语言:javascript
复制
Create table #tmp
(
    Atype varchar(10),
    Btype varchar(10)
)

insert into #tmp values ('a','x')
insert into #tmp values ('b','x')
insert into #tmp values ('a','y')
insert into #tmp values ('a','y')
insert into #tmp values ('b','z')
insert into #tmp values ('b','y')

select atype, btype,count(*) as count
from #tmp
group by atype, btype
order by atype

drop table #tmp

这将为我提供以下结果:

代码语言:javascript
复制
atype btype count
-----------------
a     x     1
a     y     2
b     x     1
b     y     1
b     z     1

在这之后,我想要的是能够创建一个基本上看起来像这样的报告:

代码语言:javascript
复制
atype|x| y| z
-------------
a    |1| 2| 0
b    |1| 1| 1

我相信你可以使用疯狂的t-sql代码来做这件事,但我正在努力做到这一点。

编辑:

我同意您可以使用TSQL PIVOT命令,但当Btype为变量时会发生什么情况。这意味着我不知道会有多少类型?

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2009-04-07 14:57:30

代码语言:javascript
复制
SELECT
  atype, 
  SUM(CASE btype WHEN 'x' THEN 1 ELSE 0 END) AS x,
  SUM(CASE btype WHEN 'y' THEN 1 ELSE 0 END) AS y,
  SUM(CASE btype WHEN 'z' THEN 1 ELSE 0 END) AS z
FROM
  #tmp
group by 
  atype
order by 
  atype
票数 3
EN

Stack Overflow用户

发布于 2009-04-07 15:13:06

@Tomalak的回答很好,但并没有什么疯狂之处,只是普通的老SQL

如果你感兴趣的话,下面是你要的非常疯狂的T-SQL代码:

代码语言:javascript
复制
SELECT  atype, [x], [y], [z]
FROM    (
        SELECT  atype, btype
        FROM    #tmp
        ) t
PIVOT
        (
        COUNT(btype)
        FOR btype IN ([x], [y], [z])
        ) AS PivotTable
票数 1
EN

Stack Overflow用户

发布于 2009-04-07 15:02:24

似乎只有SQL Server2005支持直接透视,如here所示

下面是如何使用Oracle - http://www.adp-gmbh.ch/ora/sql/examples/pivot.html来完成此操作

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

https://stackoverflow.com/questions/726152

复制
相关文章

相似问题

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