2013-11-20 106 views
1

我對SQL並不特別熟悉,但是我的團隊要求我看看這一系列的sql語句,看看是否有可能將它降低到1或2。我看了一下,然後我不知道我不相信,但我不太瞭解SQL的技巧或知識。是否可以合併或減少這些sql語句?

因此,所有的報表都具有幾乎相同的格式

select 
    id, count(*) 
from 
    table 
where 
    x_date between to_date(start_date) and to_date(end_date) 
group by 
    id 

其中x_date是唯一改變的內容。 (Start_date和end_date正是我在這裏輸入的內容,使其更具可讀性)。共有10條語句,其中7條正是這種格式。

3分不同者,他們中的一個是這樣的:

select 
    id, count(*) 
from 
    table 
where 
    x_date between to_date(start_date) and to_date(end_date) 
    and userid not like 'AUTOPEND' 
group by 
    id 

另2這個樣子的:

select 
    id, count(*) 
from 
    table 
where 
    x_date between to_date(start_date) and to. _date(end_date) 
group by 
    id, x_code 

凡x_code它們之間的不同。

他們希望將這些數據用於統計分析,但他們堅持手動使用查詢並將其鍵入。我看到的方式是我無法真正地組合這些語句,因爲它們都是由相同的字段(除了最後2個),所以它們全部結合在結果中,使分析結果無用。

我在想這件事嗎,或者有沒有辦法像他們一樣問?我可以讓1或2個sql語句每個輸出多於1個表嗎?

哦,我差點忘了。我相信這是使用SQL開發人員的Oracle PL/SQL。

回答

0

因爲第一和第二個例子是由同樣的事情分組可以使用CASE語句嵌套在一個聚合函數:

SELECT id, COUNT(*) , 
      SUM(CASE WHEN userid not like 'AUTOPEND' THEN 1 ELSE 0 END) AS [NotAUTOPEND] 
FROM table 
WHERE x_date between to_date(start_date) and to_date(end_date) 
GROUP BY id 
+0

但是從7次結構相同的查詢結果仍然會總結,雖然在一起,對不對? – DFL