2010-10-06 75 views
1

我有一个视图,其中包含(其他列)标题“名称”,和项目“评级”列。该视图将标题连接到项目表,因此每个项目都会重复标题中的名称列。一个报告的sql查询

我需要运行在桌子上的报告;理想情况下,我会在sql结果中有5列;标题“名称”以及“评级”列的4份副本,其中评级列的每个副本均显示超过特定阈值的评级计数。因此,评分栏#1将显示表中项目的数量(对于项目的标题),其评分为1或更高,第二评分栏将显示表格中项目的数量(对于同一项目的标题)评级为5或更高,等等。

我知道怎么弄的名称和1分评级列回:

select name, count(rating) as cnt1 from myview where rating > 1 group by name 

,但相结合,与其他所需评级列在此刻没有我。尝试使用“联合”条款,但只是在结果列表中放置多行。绝对需求(查询必须插入到报表模板中,因此非常不灵活)在于,我只为视图中每个唯一的“名称”字段返回一行,因为否则将要读取的报表对象数据将不知道如何解释结果。

任何提示?

更新 下面是一些示例数据:

name, rating 
myname1, 1 
myname1, 1 
myname1, 10 
myname1, 4 
myname1, 7 
myname1, 3 
myname1, 5 
myname1, 5 
myname1, 4 
myname2, 2 
myname2, 10 
myname2, 6 
myname2, 8 
myname2, 5 
myname2, 4 
myname2, 6 

和期望的输出:

name, cnt1, cnt5, cnt7, cnt8 
myname1, 7, 2, 1, 1 
myname2, 7, 4, 2, 1 

...其中CNT1 =等级> 1,CNT5 =评分> 5,CNT7 =评级> 7,CNT8 =评级> 8

+0

@ user85116,可您发布数据的表格布局,你想要什么出去? – Brad 2010-10-06 13:00:40

+0

使用Sum(Count(rating))? – Emerion 2010-10-06 13:06:18

回答

3
select name, 
     sum(case when rating > 1 then 1 else 0 end) as cnt1, 
     sum(case when rating > 5 then 1 else 0 end) as cnt2 
     /* ... repeat as many times as needed */ 
    from myview 
    group by name 
+0

非常感谢!不知道你可以在“总和”功能中做到这一点。每天学些新东西 :) – user85116 2010-10-06 13:13:56

0

选择名称, SUM(CASE WHEN等级> 1 THEN 1 ELSE 0 END)作为CNT1, SUM(CASE WHEN评分> 5 THEN 1 ELSE 0 END)作为CNT5 从MyView的 组的名字

相关问题