2015-06-30 760 views
0

由於編寫的語法/方法不正確,下面的查詢無法運行。SQL&CASE語句

有人能幫我糾正這個嗎?

我試着做以下,

SELECT COALESCE(t1.O_UPDATE,0) AS O_UP, COALESCE(t2.O_READ,0) AS O_RE, COALESCE(t3.OR_READ,0) AS OR_RD, COALESCE(t4.OR_U_READ,0) AS OR_U_RD 
from the inner SELECT statements & then pass them to a CASE statement to set values for various variables (This I think is evident from the code logic) 

SELECT TV_DATE, 
     CASE 
      WHEN t5.O_UP BETWEEN 1 AND 3 THEN O_WT=5 
      WHEN t5.O_RE BETWEEN 3 AND 5 THEN O_RD_WT = 6 
      WHEN t5.OR_RD BETWEEN 5 AND 10 THEN 5 OR_RD_WT = 4 
      WHEN t5.OR_U_RD BETWEEN 20 AND 30 THEN OR_U_RD_WT = 3 
      ELSE O_WT=0, O_RD_WT=0,OR_RD_WT=0, OR_U_RD_WT=0 
FROM 
    (
     SELECT COALESCE(t1.O_UPDATE,0) AS O_UP, COALESCE(t2.O_READ,0) AS O_RE, COALESCE(t3.OR_READ,0) AS OR_RD, COALESCE(t4.OR_U_READ,0) AS OR_U_RD FROM 
     (SELECT SUM(TV_R_U_COUNT) as O_UPDATE from TVS where TV_T_NAME='abcd' AND TV_DATE between '2015-01-01' and '2015-07-01' AND TV_R_U='U' AND TV_I_NAME LIKE 'w1%we%' AND TV_I_NAME like 'we%avd%') t1, 
     (SELECT SUM(TV_R_U_COUNT) as O_READ from TVS where TV_T_NAME='abcd' AND TV_DATE between '2015-01-01' and '2015-07-01' AND TV_R_U='X' AND TV_I_NAME LIKE 'w1%we%' AND TV_I_NAME like 'er%dfr%') t2, 
     (SELECT SUM(TV_R_U_COUNT) as OR_READ from TVS where TV_T_NAME='abcd' AND TV_DATE between '2015-01-01' and '2015-07-01' AND TV_R_U='X' AND TV_I_NAME LIKE 'w1%we%' AND TV_I_NAME like 'cv%dfr%' AND TV_I_NAME NOT LIKE 'dsf%er%') t3, 
     (SELECT SUM(TV_R_U_COUNT) as OR_U_READ from TVS where TV_T_NAME='abcd' AND TV_DATE between '2015-01-01' and '2015-07-01' AND TV_R_U='X' AND TV_I_NAME LIKE 'w1%we%' AND TV_I_NAME like 'ad%asd%ere') t4 
    ) t5 TVS 
GROUP BY TV_DATE 

+-------------+------+---------+----------+------------+------------+ 
| DATE  | O_WT | O_RD_WT | OR_RD_WT | OR_U_RD_WT | OR_U_RD_WT | 
+-------------+------+---------+----------+------------+------------+ 
| 2015-01-01 | 5 |  6 |  4 |   3 |   0 | 
| 2015-01-02 | 5 |  0 |  0 |   3 |   0 | 
| 2015-01-03 | 5 |  0 |  0 |   0 |   0 | 
| 2015-01-04 | 5 |  6 |  4 |   0 |   0 | 
| 2015-01-05 | 5 |  0 |  0 |   3 |   0 | 
+-------------+------+---------+----------+------------+------------+ 

我會很感激的任何幫助,請。

+1

到底在哪錯誤?你得到的實際錯誤是什麼? –

+0

爲什麼GROUP BY但沒有聚合函數? – jarlh

+0

順便說一下,案件的表達 - 不是案件陳述... – jarlh

回答

1

使用單獨case聲明statement.try這

SELECT TV_DATE, 
     CASE WHEN t5.O_UP BETWEEN 1 AND 3 THEN O_WT=5 ELSE O_WT=0 END as O_WT, 
     CASE WHEN t5.O_RE BETWEEN 3 AND 5 THEN O_RD_WT = 6 ELSE O_RD_WT=0 END as O_RD_WT, 
     CASE WHEN t5.OR_RD BETWEEN 5 AND 10 THEN 5 OR_RD_WT = 4 ELSE OR_RD_WT=0 END as OR_RD_WT, 
     CASE WHEN t5.OR_U_RD BETWEEN 20 AND 30 THEN OR_U_RD_WT = 3 ELSE OR_U_RD_WT=0 END as OR_U_RD_WT 

你的整個查詢會是這樣的

SELECT TV_DATE, 
     CASE WHEN t5.O_UP BETWEEN 1 AND 3 THEN O_WT=5 ELSE O_WT=0 END as O_WT, 
      CASE WHEN t5.O_RE BETWEEN 3 AND 5 THEN O_RD_WT = 6 ELSE O_RD_WT=0 END as O_RD_WT, 
      CASE WHEN t5.OR_RD BETWEEN 5 AND 10 THEN 5 OR_RD_WT = 4 ELSE OR_RD_WT=0 END as OR_RD_WT, 
      CASE WHEN t5.OR_U_RD BETWEEN 20 AND 30 THEN OR_U_RD_WT = 3 ELSE OR_U_RD_WT=0 END as OR_U_RD_WT 
FROM 
    (
     SELECT COALESCE(t1.O_UPDATE,0) AS O_UP, COALESCE(t2.O_READ,0) AS O_RE, COALESCE(t3.OR_READ,0) AS OR_RD, COALESCE(t4.OR_U_READ,0) AS OR_U_RD FROM 
     (SELECT SUM(TV_R_U_COUNT) as O_UPDATE from TVS where TV_T_NAME='abcd' AND TV_DATE between '2015-01-01' and '2015-07-01' AND TV_R_U='U' AND TV_I_NAME LIKE 'w1%we%' AND TV_I_NAME like 'we%avd%') t1, 
     (SELECT SUM(TV_R_U_COUNT) as O_READ from TVS where TV_T_NAME='abcd' AND TV_DATE between '2015-01-01' and '2015-07-01' AND TV_R_U='X' AND TV_I_NAME LIKE 'w1%we%' AND TV_I_NAME like 'er%dfr%') t2, 
     (SELECT SUM(TV_R_U_COUNT) as OR_READ from TVS where TV_T_NAME='abcd' AND TV_DATE between '2015-01-01' and '2015-07-01' AND TV_R_U='X' AND TV_I_NAME LIKE 'w1%we%' AND TV_I_NAME like 'cv%dfr%' AND TV_I_NAME NOT LIKE 'dsf%er%') t3, 
     (SELECT SUM(TV_R_U_COUNT) as OR_U_READ from TVS where TV_T_NAME='abcd' AND TV_DATE between '2015-01-01' and '2015-07-01' AND TV_R_U='X' AND TV_I_NAME LIKE 'w1%we%' AND TV_I_NAME like 'ad%asd%ere') t4 
    ) t5 TVS 
+0

你好阿米亞 - 非常感謝你。你能不能幫我添加日期以及輸出?如他所輸出的那樣,我需要每天的O_WT,O_RD_WT,OR_RD_WT,OR_U_RD_WT和OR_U_RD_WT的值。我猜測最內層的SELECT查詢必須修改才能包含日期。我不確定如何在整個畫面中冷卻。 – User12345