2013-11-27 91 views
0

也許我錯過了一些東西。我正在嘗試做一個非常簡單的選擇語句。我想其中的邏輯是,如果兩列(ActivityDate和CREATEDATE)等於海誓山盟和一個或另一個我們列和DoubleBookedHours欄爲零,應返回:WHERE子句不按預期編組

SELECT * 
FROM DailyTaskHours 
WHERE ActivityDate = CreateDate 
    AND (
     Hours != 0 
     AND DoubleBookedHours != 0 
     ) 

以上是返回什麼。

enter image description here

在上圖中的第一行是什麼它應該返回,因爲兩者不列小時,並DoubleBookedHours爲零,但日期是equivelant。第二行是我不希望它返回的原因,因爲Hours和DoubleBookedHours都是零。

我在做什麼錯?

編輯:

SELECT * 
FROM DailyTaskHours 
WHERE ActivityDate = CreateDate AND Hours != 0 AND DoubleBookedHours != 0 

以上沒有返回值。

SELECT * 
FROM DailyTaskHours 
WHERE ActivityDate = CreateDate 
    AND Hours = 0 
     AND DoubleBookedHours = 0 

以上的回報我想要的正好相反:

enter image description here

+2

你能換數據的圖片?實際上很難閱讀。 –

+0

不按預期分組 - 你不知道「或」嗎? – perfectionist

回答

5

您正在執行正好相反。通過使用!你只是說0而不是0。另外,沒有必要在where子句中使用括號。

SELECT * 
FROM DailyTaskHours 
WHERE ActivityDate = CreateDate 
    AND Hours = 0 
    AND DoubleBookedHours = 0 

如果你想回到那些不具備這兩個Hours = 0DubleBookedHours = 0,則:

SELECT * 
FROM DailyTaskHours 
WHERE ActivityDate = CreateDate 
    AND NOT 
    (Hours = 0 AND DoubleBookedHours = 0) 
+0

我的答案很相似,但你的解釋很好! – JRO

0
SELECT * 
    FROM DailyTaskHours 
    WHERE ActivityDate = CreateDate 
     AND Hours = 0 
     AND DoubleBookedHours = 0 
2

它應該是:

--test data 
DECLARE @DailyTaskHours AS TABLE (ActivityDate datetime, CreateDate datetime, [Hours] int, DoubleBookedHours int) 
INSERT INTO @DailyTaskHours VALUES ('01 Jan 2012','01 Jan 2012',0,1) 
INSERT INTO @DailyTaskHours VALUES ('01 Jan 2012','01 Jan 2012',0,0) 

--query 
SELECT * 
FROM @DailyTaskHours 
WHERE ActivityDate = CreateDate 
AND ([Hours] <> 0 OR DoubleBookedHours <> 0) 
     --result 
ActivityDate   CreateDate    Hours DoubleBookedHours 
2012-01-01 00:00:00.000 2012-01-01 00:00:00.000 0  1 
+0

這是返回我想要的反例。我想要那些既沒有小時= 0又沒有DubleBookedHours = 0 –

+2

@DavidTunnell的返回,您需要更新您的問題,此刻它說「和兩個小時列和DoubleBookedHours列爲零」 – OGHaza

+0

@DavidTunnell改變以反映您更改的請求。 – Mack

2
SELECT * 
FROM DailyTaskHours 
WHERE ActivityDate = CreateDate 
    AND (
     Hours != 0 
     OR         -- this 
     DoubleBookedHours != 0 
    )