簡體   English   中英

動態查詢雙向頻率表或交叉表/數據透視表問題

[英]Dynamic query for two way frequency table or crosstab/pivot issue

我有一個具有表名稱的數據庫模型,該模型具有兩列Category和Agegroup。 我的表(只是一個例子)是:

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

我想要這樣的輸出:

Category   2-4   7-9   9-11
   1        2     0     2
   2        0     2     0
   3        1     1     0

我有一個像這樣的動態查詢,但是我得到了不同的方式。

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)

請提供您的意見以提供幫助。 類別1是蘋果,類別2是橙色,依此類推。

我的輸出:

Category 2-4 7-9 9-11
  1       1   0   0
  1       1   0   0
  2       0   1   0
  1       0   0   1 

等等..

我已經十年沒有使用SQL Server了,但這就是結果查詢在MySQL中的樣子:

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的“數據透視”功能可以更好地解決此問題?

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM