2014-11-06 37 views
-1

我想要一個SQL查詢以遵循WHERE語句的條件,除了那些子查詢。在下面的例子中,我希望獲得上週的所有條目,但我希望子查詢忽略外部WHERE子句,但我不確定它的行爲。如果子查詢有它自己的WHERE條件,子查詢是否會忽略外部WHERE條件?

例如:

SELECT 
ProductID, 
SUM(CASE WHEN from_source = 'button' THEN 1 ELSE 0 END) 'Used Button', 
(SELECT COUNT(*) FROM tracking WHERE from_source = 'button') 'Used Button to date' 
FROM tracking 
WHERE date_entered > (GETDATE() - 7) 
GROUP BY ProductID 

預期輸出,其中第二塔是基於外計算WHERE和子查詢沒有注視外WHERE:

的ProductID |使用的按鈕|使用過的按鈕迄今

123 | 5 | 102

456 | 8 | 175

+2

是的,您的'用過的按鈕至日期列'將返回所有數據,而不僅僅是具有不到7天的'date_entered'的數據。 – AHiggins 2014-11-06 19:46:27

+1

顯示您的預期輸出 – 2014-11-06 19:47:59

+1

它將在您在SO上發佈之前測試它時的行爲。在你發佈之前你確實測試過了,不是嗎? – 2014-11-06 19:48:29

回答

1

你可以只使用條件聚集編寫查詢:

select sum(case when date_entered > (GETDATE() - 7) then 1 else 0 
      end) as UsedButton, 
     count(*) as UsedButtonToDate 
from tracking 
where from_source = 'button'; 

這似乎是一個簡單的方法。

順便說一句,你不應該使用單引號列別名。或者將列命名爲不需要轉義的東西(如上所述)或使用方括號。