sql查询报告

时间:2010-10-06 12:57:50

标签: sql

我有一个视图,其中包含(以及其他列)标题“name”和项目“rating”列。视图将标题连接到项目表,因此标题的名称列将针对每个项目重复。

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

我知道如何获取名称和1个评级栏:

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

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

任何提示?

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

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

2 个答案:

答案 0 :(得分: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

答案 1 :(得分:0)

选择姓名, SUM(等级> 1,然后1 ELSE 0 END)作为cnt1, SUM(等级> 5,然后1 ELSE 0 END)作为cnt5 来自myview 按名称分组