首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >双向频率表或交叉表/透视问题的动态查询

双向频率表或交叉表/透视问题的动态查询
EN

Stack Overflow用户
提问于 2014-03-03 04:39:04
回答 1查看 539关注 0票数 2

我有一个数据库模型,表名为work,有两个列Category和Agegroup。我的表(只是一个例子)是:

代码语言:javascript
运行
复制
Category     Agegroup
    1       2-4
    2       7-9
    1       9-11
    3       7-9
    2       7-9
    1       2-4
    3       2-4 
    1       9-11

我想要这样的输出:

代码语言:javascript
运行
复制
Category   2-4   7-9   9-11
   1        2     0     2
   2        0     2     0
   3        1     1     0

我有一个像这样的动态查询,但我采用了一种不同的方式。

代码语言:javascript
运行
复制
DECLARE @cols AS NVARCHAR(MAX),
    @query  AS NVARCHAR(MAX)

select @cols = STUFF((SELECT distinct ',' + QUOTENAME(Agegroup) 
                    from dbo.model
            FOR XML PATH(''), TYPE
            ).value('.', 'NVARCHAR(MAX)') 
        ,1,1,'')

set @query = 'SELECT Category,' + @cols + ' 
            from dbo.model
            pivot 
            (
                count(Agegroup)
                for Agegroup in (' + @cols + ')
            ) p '

execute(@query)

请提供您的输入以提供帮助。第一类是苹果,第二类是橙色等等。

我的输出:

代码语言:javascript
运行
复制
Category 2-4 7-9 9-11
  1       1   0   0
  1       1   0   0
  2       0   1   0
  1       0   0   1 

以此类推..

EN

回答 1

Stack Overflow用户

发布于 2014-03-03 06:05:14

我有十年没有使用SQL Server了,但结果查询在MySQL中看起来就是这样:

代码语言:javascript
运行
复制
select Category, sum(if(Agegroup='2-4',1,0)), sum(if(Agegroup='7-9',1,0)), sum(if(Agegroup='9-11',1,0))
from dbo.model
group by Category;

在SQL server中尝试以下结果SQL,如果它为您提供了正确的数据,您将不得不动态执行它……

但是也许有更好的修复方法,使用SQL Server中的“pivot”函数?

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

https://stackoverflow.com/questions/22133145

复制
相关文章

相似问题

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