2014-12-05 42 views
0

我是oracle新手,我必須更新以下SQL以將客戶端「標題」顯示爲第一個字段,並將計數顯示爲第二個字段,就像現在一樣。如果你看看下面的SQL是我現在已經和它運行很好,但有人可以告訴我如何從客戶表」替換Oracle SQL中的字段,加入不工作

SQL添加標題:

select SUBSTR(activity, INSTR(activity, '/', 1, 4) + 1, INSTR(activity, '/', 1, 5) - INSTR(activity, '/', 1, 4) -1) AS FILENAME, 
COUNT (SUBSTR(activity, INSTR(activity, '/', 1, 4) + 1, INSTR(activity, '/', 1, 5) - INSTR(activity, '/', 1, 4)-1)) AS DOWNLOADS 
FROM access_log where id = 5555 and time_stamp BETWEEN TO_DATE ('2014/05/01', 'yyyy/mm/dd') AND TO_DATE ('2014/10/31', 'yyyy/mm/dd') 
GROUP BY SUBSTR(activity, INSTR(activity, '/', 1, 4) + 1, INSTR(activity, '/', 1, 5) - INSTR(activity, '/', 1, 4) -1) 
ORDER BY DOWNLOADS DESC; 

表:

Table name: access_log 
Col name: activity 
Value: Download file:/webdocs/data/groupXXX/case/03_28_54_9_0000011856.pdf 
Col name: id 
Value: 5555 

Table name: client 
Col name: id 
Value: 5555 
Col name: title 
Value: dj cafe 

請如果你能幫助我...

它應該是這樣的這

**TITLE|DOWNLOADS 
dj cafe|22** 

回答

0

如果要從多個表中生成結果集繪圖,那麼必須在涉及的表上執行適當的連接。根據表格之間的關係判斷,主要通過連接謂詞來衡量連接「合適」的原因。

SELECT 
    client.title AS TITLE, 
    COUNT(SUBSTR(activity, INSTR(activity, '/', 1, 4) + 1, INSTR(activity, '/', 1, 5) - INSTR(activity, '/', 1, 4)-1)) AS DOWNLOADS 
FROM 
    access_log 
    JOIN client 
    ON client.id = access_log.id 
WHERE 
    client.id = 5555 
    AND time_stamp BETWEEN TO_DATE ('2014/05/01', 'yyyy/mm/dd') AND TO_DATE ('2014/10/31', 'yyyy/mm/dd') 
GROUP BY SUBSTR(activity, INSTR(activity, '/', 1, 4) + 1, INSTR(activity, '/', 1, 5) - INSTR(activity, '/', 1, 4) -1) 
ORDER BY DOWNLOADS DESC; 
:在你的情況,如果表 access_logclient通過各自 id領域(這將是一個有些奇怪),那麼這個查詢將做的工作有關
0

既然你已經在其他表的列中的值client,你需要joinID列兩個tables。並在列表select列表中包含列名稱ID和適當的table alias

喜歡的東西,

table1 INNER JOIN table2 ON (table1.id = table2.id)

請確保您有選擇列表中的group by子句中的列了。

您幾乎可以編寫所需的SQL,只需實施建議即可獲得所需的輸出。