2017-04-06 96 views
1

表1具有6選項的字段集A,B,C,持有值0=false and 1=trueSendToA,SendToB,SendToC持有值null=0, success=1, failure=2 .The檢查是如果任何字段A,B,C = 1(true)然後字段SendToA,SendToB,SendToC=1(success),提取數據。因此,我在SQL查詢所做的是:篩選記錄根據6個相關領域

首先查詢

SELECT TableId 
,A 
,B 
,C 
,SendToA 
,SendToB 
,SendToC 
FROM Table1 
WHERE (A=1 AND SendToA =1) 
OR (B=1 AND SendToB=1) 
OR (C=1 AND SendToC=1) 

第二個查詢

SELECT TableId 
,A 
,B 
,C 
,SendToA 
,SendToB 
,SendToC 
FROM Table1 
WHERE (A=1 OR B=1 OR C=1) 
AND (SendToA=1 OR SendToB=1 OR SendToC=1) 

這是例如,對於第二查詢執行結果。

TableId A B C SendToA SendToB SendToC 
    ABC1 1 1 0 1   2  1 
    ABC2 0 0 1 0   1  0 

有一定的記錄中的問題時,任何領域A,B,C=1(true)SendToA,SendToB,SendToC is not = 1(success)。如果A,B,C=0(false)其在SendToA,SendToB,SendToC中的值不重要,則這兩個查詢不會執行正確的結果。要說清楚的是我想根據A,B,C = 1中的任何值然後在SendToA,SendToB,SendToC=1中的值過濾記錄,然後提取數據。在記錄其無論是A or B or C=1要麼但至少要麼A or B or C必須有1.Once A or B or C=1其所屬SendToA,SendToB,SendToC也必須1否則忽略。

+0

查詢不一樣,這就是爲什麼他們不一定會給出相同的結果。你在期待什麼? – ahoxha

+0

這是有點不清楚你想要什麼?你是否希望看到所有的「發送」都成功了? – user1429080

+0

@ user1429080您好我想根據A,B,C = 1和SendToA,SendToB和SendToC = 1中的任何一個過濾記錄。但是當A = 1並且SentToA = 1時,在我的表中有某些記錄,但是B = 1並且SendToB不是= 1.如果B = o AND /或C = 0(不要煩惱檢查SendtoB和/或SendToC = 1)只要A = 1且SendtoA = 1。只要檢查SendTo值= 1,如果它們對應的A或B或C = 1。對不起,這是我能解釋的最好方式。 – xChaax

回答

1

不知道這是否是你想要的(見註釋)到底是什麼,但你可以測試,看看是否它的工作:

-- prepare test data 

declare @t table (
    TableId varchar(10), 
    A int not null, 
    B int not null, 
    C int not null, 
    SendToA int null, 
    SendToB int null, 
    SendToC int null 
) 

insert into @t values ('ABC1', 1, 1, 0, 1, 2, 1) 
insert into @t values ('ABC2', 0, 0, 1, 0, 1, 0) 
insert into @t values ('ABC3', 1, 1, 0, 1, 1, 1) 
insert into @t values ('ABC4', 0, 0, 1, 0, 1, 1) 

然後(與你的實際表名稱替換@t):

-- query 

select * 
from @t 
where (A=0 or SendToA = 1) 
    and (B=0 or SendToB = 1) 
    and (C=0 or SendToC = 1) 
    and (A=1 or B=1 or C=1) 
+0

感謝您的幫助。 – xChaax