台灣最大程式設計社群網站
線上人數
699
 
會員總數:238612
討論主題:185183
歡迎您免費加入會員
討論區列表 >> Oracle >> 條件式可否放在最外層,而僅篩選 D2 的資料
[ 變換順序 ]  
[我要回覆]
1
回應主題 加入我的關注話題 檢舉此篇討論 將提問者加入個人黑名單
條件式可否放在最外層,而僅篩選 D2 的資料
價值 : 100 QP  點閱數:167 回應數:6

樓主

Liu-Liu
初學者
10 2
339 18
發送站內信


以上是可以篩選到該部門填答問卷的資料
總人數:7
填表人數:(null)
QMID:(null)



以上無法篩選到任何資料



以上是可以篩選到該部門填答問卷的資料
總人數:7
填表人數:1
QMID:3


是否能將 QMID = 1 的條件式放在最外層,而僅篩選 D2 的資料,D1 的所有部門代號必須列出(在不加 Where 部門代號 = 11 的條件式下)?

搜尋相關Tags的文章: [ 條件式 ] , [ Where ] , [ 篩選 ] ,
本篇文章發表於2016-11-04 19:05
別忘捐VP感謝幫助你的人 新手會員瞧一瞧
1樓
回應

浩瀚星空
捐贈 VP 給 浩瀚星空 檢舉此回應
基本上你可以用如下語法來處理



那個AS test不知道是不是需要。因為我在操作mysql時,是需要給子查詢表一個別稱的。
不過oracle就不確定是否要給他一個別稱了。不需要就拿掉吧。

qmid的條件放進去子查詢內會效能比較好。查出來的資料,再用group的方式統計起來顯示就行。
如果說真的要將qmid放到子查詢外做條件的話。就只能使用雙重子查詢來處理了。
不過這樣效能會比較不好。
本篇文章回覆於2016-11-07 11:48
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
2樓
作者回應

Liu-Liu
檢舉此回應
總人數和填表人數本身已經是經過計算(Count)的數量了,無需再做加總(Sum)的動作
本篇文章回覆於2016-11-07 13:02
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
3樓
回應

浩瀚星空
捐贈 VP 給 浩瀚星空 檢舉此回應
要不要加總你自行判斷。

但在sql語法的控制。我並不清楚你的資料庫節構的情況為何。
在常理說,如果你確定子查尋的條件只會出現單一部門的資料情況下。

那的確是不需要做sum處理。
但我這是安全性的寫法。因為無論是單一筆或是多筆。都是可以正常統計的處理方式。

再來提外話。如果說子查詢的條件,是只有可能會撈出唯一性的部門資料。
那這個子查詢其實是多餘的。根本不需要使用子查詢的語法。

因為我不清楚你的資料情況是如何的。只能就你目前的sql語法下去幫你修改判斷

你跟我說總人數跟填表人數是經過計算的。無需加總的說法。
那為何你不先跑看看。或是說明一下你的資料情況是如何的??

要不然就單純的這樣跟你說處理方式。然後你跟我說不需要sum!!!!
我哪知你需不需要sum啊~~~~就算是單一加總你覺得不需要。那拿掉不就行了。
本篇文章回覆於2016-11-07 17:45
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
4樓
回應

asp小菜渣
檢舉此回應
你最後要求的結果很怪…
==========================
第一張語法結果:
總人數:7
填表人數:(null)
QMID:(null)
※表示部門11,是沒有人填寫QMID=1的,用LEFT的結果才會是NULL。
==========================
第二張語法結果:
以上無法篩選到任何資料
※你只是把QMID拿到外面,同上,表示部門11,是沒有人填寫QMID=1的,所以不會有任何資料。
==========================
第三張語法結果:
總人數:7
填表人數:1
QMID:3
※不就表示此部門11,只有1個人填,而且是寫QMID=3…
==========================
是否能將 QMID = 1 的條件式放在最外層,而僅篩選 D2 的資料,D1 的所有部門代號必須列出(在不加 Where 部門代號 = 11 的條件式下)?
↑你當然可以把QMID = 1 的條件式放在最外層,也當然不能加Where 部門代號 = 11啊…因為一定沒資料。

樓上的7~17行就可以解決你的問題了


本篇文章回覆於2016-11-10 11:30
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
5樓
作者回應

Liu-Liu
檢舉此回應
晚回抱歉

>>無需再做加總(Sum)的動作
抱歉,本人沒親測語法,還以為不需使用到 Sum

模擬資料如下:
D1:


D2:


若是使用以下的語法:


會產生:
[table]
[tr]
[th]部門代號[/th]
[th]總人數[/th]
[th]填表人數[/th]
[th]QMID[/th]
[/tr]
[tr]
[td]11[/td]
[td]7[/td]
[td]1[/td]
[td]3[/td]
[/tr]
[tr]
[td]13[/td]
[td]13[/td]
[td](null)[/td]
[td](null)[/td]
[/tr]
[tr]
[td]12[/td]
[td]11[/td]
[td](null)[/td]
[td](null)[/td]
[/tr]
[/table]

若最後一行加入條件式 Where QMID = 1
會沒有任何資料列出來
我想將 D1 的所有部門代號必須列出就做不到了~~~
本篇文章回覆於2016-11-21 19:01
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
6樓
作者回應

Liu-Liu
檢舉此回應
若是使用以下的語法:


會產生:
部門代號,總人數,填表人數,QMID
11,7,1,3
13,13,(null),(null)
12,11,(null),(null)

若最後一行加入條件式 Where QMID = 1
會沒有任何資料列出來
我想將 D1 的所有部門代號必須列出就做不到了~~~
本篇文章回覆於2016-11-21 19:05
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
[ 變換順序 ]   
1

回覆
如要回應,請先登入.