2010-10-06 81 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的 組的名字

相關問題