0

我有productagegroup表。

我正在idagegroup表和表agegroup的匹配中加入这两个product表。

我正在使用的查询在这里;

WITH CTE_AgeGroup AS                                                                            
                (
                SELECT  p.agegroup,
                      CASE
                             WHEN AgeFromMonths >=0 AND AgeToMonths <= 24 
                               THEN
                                    CASE 
                                          WHEN AgeFromMonths >=0 AND AgeToMonths <= 3 THEN '0-3 Months'
                                          WHEN AgeFromMonths >=3 AND AgeToMonths <= 6 THEN '3-6 Months'
                                          WHEN AgeFromMonths >=6 AND AgeToMonths <= 9 THEN '6-9 Months'
                                          WHEN AgeFromMonths >=9 AND AgeToMonths <= 12 THEN '9-12 Months'
                                          WHEN AgeFromMonths >=12 AND AgeToMonths <= 18 THEN '12-18 Months'
                                          WHEN AgeFromMonths >=18 AND AgeToMonths <= 24 THEN '18-24 Months'
                                          END  
                           END as  'age'
                FROM agegroup a inner join product p on
                a.id= p.agegroup

                ),
                  CTE_AgeGroupResultSet AS
                (
                   select
                        Age, Count(*) AS CountAge from CTE_AgeGroup  group by Age   
                      )
                select * from CTE_AgeGroupResultSet order by age;  

但是,我的问题是,如果产品 A 在“0-3 个月”中列出,而产品 B 在“3-6 个月”中列出,那么这两种产品不会在“0-24 个月”中列出。

我想修改我的查询,以便产品 A 和 B 也列在“0-24 个月”中

4

2 回答 2

1

您可以使用with rollup in group by 来获得大计数:

WITH CTE_AgeGroup AS
(
    SELECT p.agegroup,
           CASE WHEN AgeFromMonths >=0 AND AgeToMonths <= 24 
                THEN CASE WHEN AgeFromMonths >=0 AND AgeToMonths <= 3 
                          THEN '0-3 Months'
                          WHEN AgeFromMonths >=3 AND AgeToMonths <= 6 
                          THEN '3-6 Months'
                          WHEN AgeFromMonths >=6 AND AgeToMonths <= 9 
                          THEN '6-9 Months'
                          WHEN AgeFromMonths >=9 AND AgeToMonths <= 12 
                          THEN '9-12 Months'
                          WHEN AgeFromMonths >=12 AND AgeToMonths <= 18 
                          THEN '12-18 Months'
                          WHEN AgeFromMonths >=18 AND AgeToMonths <= 24 
                          THEN '18-24 Months'
                      END  
            END as 'age'
    FROM agegroup a 
         inner join product p 
            on a.id= p.agegroup
),
CTE_AgeGroupResultSet AS
(
    select case when grouping (Age) = 1 then '0-24' else Age end Age, 
           Count(*) AS CountAge 
      from CTE_AgeGroup
     group by Age WITH ROLLUP
)
select * 
  from CTE_AgeGroupResultSet 
 order by age;

此外,如果您将 varchar 列添加到包含组描述的年龄组,您将完全消除大小写。

于 2012-04-24T09:14:39.883 回答
0

我不确定您为什么要使用这种案例功能。最好使用 UNION 运算符(这只需要合并您的产品和年龄组表)

FULL OUTER JOIN(连接两个表并从两个表中获取数据,即使两个表中都有 NULL 值。)

于 2012-04-24T05:57:18.220 回答