我正在選擇一些聚合數據和日期和特定字段上的分組。我想顯示該字段中的所有值,並計算這些值,即使當天沒有與該字段匹配的數據。例如。在Oracle中刪除額外的子查詢,選擇值的數組
Date MyField Count
2009-09-25 A 2
2009-09-25 B 0
2009-09-24 A 1
2009-09-24 B 1
Oracle的SQL我現在要做的,這是類似以下內容:
SELECT today,
mytable.myfield,
COUNT(
CASE WHEN fields.myfield = mytable.myfield AND
date >= today AND
date < tomorrow
THEN 1
END
)
FROM (
SELECT TRUNC(SYSDATE) + 1 - LEVEL AS today,
TRUNC(SYSDATE) + 2 - LEVEL AS tomorrow
FROM DUAL
CONNECT BY LEVEL <= 30
),
(
/* This is the part that seems inefficient */
SELECT DISTINCT myfield
FROM mytable
WHERE myfield IN ('A', 'B')
) fields,
mytable
GROUP BY today, mytable.myfield
ORDER BY today DESC, mytable.myfield ASC
我擔心的是,我確切地知道哪些值我想顯示myfield
,似乎效率不高有一個SELECT
查詢訪問mytable
。我在想,如果有一些方法我可以做這樣的事情在該子查詢:
SELECT ('A', 'B') AS myfield
FROM DUAL
我使用Oracle的較早版本,其中WITH
條款不工作。
你使用什麼Oracle版本?按級別連接在Oracle 8中不起作用,因此您使用Oracle 9或10.但Oracle 9和10具有with子句,因此您應該能夠使用with子句。 – tuinstoel 2009-09-26 07:36:38
CONNECT BY LEVEL絕對有效,但WITH子句在我用來訪問我公司的數據庫的接口中沒有工作。我不確定它是什麼版本的Oracle。 – 2009-09-26 16:39:40
從v $版本中選擇*來查看您使用的是哪種Oracle版本。 – tuinstoel 2009-09-26 17:08:44