我有一个模拟的sql查询,将代表一个真正的sql查询。
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这将为我提供以下结果:
atype btype count
-----------------
a x 1
a y 2
b x 1
b y 1
b z 1在这之后,我想要的是能够创建一个基本上看起来像这样的报告:
atype|x| y| z
-------------
a |1| 2| 0
b |1| 1| 1我相信你可以使用疯狂的t-sql代码来做这件事,但我正在努力做到这一点。
编辑:
我同意您可以使用TSQL PIVOT命令,但当Btype为变量时会发生什么情况。这意味着我不知道会有多少类型?
发布于 2009-04-07 14:57:30
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发布于 2009-04-07 15:13:06
@Tomalak的回答很好,但并没有什么疯狂之处,只是普通的老SQL。
如果你感兴趣的话,下面是你要的非常疯狂的T-SQL代码:
SELECT atype, [x], [y], [z]
FROM (
SELECT atype, btype
FROM #tmp
) t
PIVOT
(
COUNT(btype)
FOR btype IN ([x], [y], [z])
) AS PivotTable发布于 2009-04-07 15:02:24
似乎只有SQL Server2005支持直接透视,如here所示
下面是如何使用Oracle - http://www.adp-gmbh.ch/ora/sql/examples/pivot.html来完成此操作
https://stackoverflow.com/questions/726152
复制相似问题