簡體   English   中英

sql server語句返回值兩次

[英]sql server statement returning values 2 times

select
 loginname as 'Officer',
CONVERT(VARCHAR(10), visit.tmstamp, 105) as 'Date',
visit.queueno

from visit,event   where (  visit.branchno='1007'    )  
and  
(visit.wstation='1'  or visit.wstation='10'  or visit.wstation='11'  or visit.wstation='15'  or visit.wstation='2'  or visit.wstation='20'  or visit.wstation='21'  or visit.wstation='23'  or visit.wstation='24'  or visit.wstation='28'  or visit.wstation='29'  or visit.wstation='3'  or visit.wstation='30'  or visit.wstation='31'  or visit.wstation='32'  or visit.wstation='33'  or visit.wstation='4'  or visit.wstation='5'  or visit.wstation='6'  or visit.wstation='7'  or visit.wstation='8'  or visit.wstation='9'    )  and  (visit.catname='BY PASS'  or visit.catname='REG STORE'  or visit.catname='REGISTRATION'  or visit.catname='ROOM 1 to 4'  or visit.catname='ROOM A1 & A2'  or visit.catname='ROOM A3 & A4'  or visit.catname='ROOM A5-A7&A9-A11'  or visit.catname='ROOM A8-BMD'  or visit.catname='ROOM B20'  or visit.catname='ROOM B21 B23 B24'  or visit.catname='Ward Cases'    )  and  (visit.btnname='BY PASS'  or visit.btnname='REG STORE'  or visit.btnname='REGISTRATION'  or visit.btnname='ROOM 1 to 4'  or visit.btnname='ROOM A1 & A2'  or visit.btnname='ROOM A3 & A4'  or visit.btnname='ROOM A5-A7&A9-A11'  or visit.btnname='ROOM A8-BMD'  or visit.btnname='ROOM B20'  or visit.btnname='ROOM B21'  or visit.btnname='B23'  or visit.btnname='B24'  or visit.btnname='Ward Cases'  )   and (    (Day(visit.tmstamp)=1 AND MONTH(visit.tmstamp)=12 AND YEAR(visit.tmstamp)=2010)      OR (DAY(visit.tmstamp)=2 AND MONTH(visit.tmstamp)=12 AND YEAR(visit.tmstamp)=2010)       OR (DAY(visit.tmstamp)=3 AND MONTH(visit.tmstamp)=12 AND YEAR(visit.tmstamp)=2010)       OR (DAY(visit.tmstamp)=4 AND MONTH(visit.tmstamp)=12 AND YEAR(visit.tmstamp)=2010)       OR (DAY(visit.tmstamp)=5 AND MONTH(visit.tmstamp)=12 AND YEAR(visit.tmstamp)=2010)       OR (DAY(visit.tmstamp)=6 AND MONTH(visit.tmstamp)=12 AND YEAR(visit.tmstamp)=2010)       OR (DAY(visit.tmstamp)=7 AND MONTH(visit.tmstamp)=12 AND YEAR(visit.tmstamp)=2010)       OR (DAY(visit.tmstamp)=8 AND MONTH(visit.tmstamp)=12 AND YEAR(visit.tmstamp)=2010)       OR (DAY(visit.tmstamp)=9 AND MONTH(visit.tmstamp)=12 AND YEAR(visit.tmstamp)=2010)       OR (DAY(visit.tmstamp)=10 AND MONTH(visit.tmstamp)=12 AND YEAR(visit.tmstamp)=2010)       OR (DAY(visit.tmstamp)=11 AND MONTH(visit.tmstamp)=12 AND YEAR(visit.tmstamp)=2010)       OR (DAY(visit.tmstamp)=12 AND MONTH(visit.tmstamp)=12 AND YEAR(visit.tmstamp)=2010)       OR (DAY(visit.tmstamp)=13 AND MONTH(visit.tmstamp)=12 AND YEAR(visit.tmstamp)=2010)       OR (DAY(visit.tmstamp)=14 AND MONTH(visit.tmstamp)=12 AND YEAR(visit.tmstamp)=2010)       OR (DAY(visit.tmstamp)=15 AND MONTH(visit.tmstamp)=12 AND YEAR(visit.tmstamp)=2010)       OR (DAY(visit.tmstamp)=16 AND MONTH(visit.tmstamp)=12 AND YEAR(visit.tmstamp)=2010)       OR (DAY(visit.tmstamp)=17 AND MONTH(visit.tmstamp)=12 AND YEAR(visit.tmstamp)=2010)       OR (DAY(visit.tmstamp)=18 AND MONTH(visit.tmstamp)=12 AND YEAR(visit.tmstamp)=2010)       OR (DAY(visit.tmstamp)=19 AND MONTH(visit.tmstamp)=12 AND YEAR(visit.tmstamp)=2010)       OR (DAY(visit.tmstamp)=20 AND MONTH(visit.tmstamp)=12 AND YEAR(visit.tmstamp)=2010)       OR (DAY(visit.tmstamp)=21 AND MONTH(visit.tmstamp)=12 AND YEAR(visit.tmstamp)=2010)       OR (DAY(visit.tmstamp)=22 AND MONTH(visit.tmstamp)=12 AND YEAR(visit.tmstamp)=2010)       OR (DAY(visit.tmstamp)=23 AND MONTH(visit.tmstamp)=12 AND YEAR(visit.tmstamp)=2010)       OR (DAY(visit.tmstamp)=24 AND MONTH(visit.tmstamp)=12 AND YEAR(visit.tmstamp)=2010)       OR (DAY(visit.tmstamp)=25 AND MONTH(visit.tmstamp)=12 AND YEAR(visit.tmstamp)=2010)       OR (DAY(visit.tmstamp)=26 AND MONTH(visit.tmstamp)=12 AND YEAR(visit.tmstamp)=2010)       OR (DAY(visit.tmstamp)=27 AND MONTH(visit.tmstamp)=12 AND YEAR(visit.tmstamp)=2010)       OR (DAY(visit.tmstamp)=28 AND MONTH(visit.tmstamp)=12 AND YEAR(visit.tmstamp)=2010)       OR (DAY(visit.tmstamp)=29 AND MONTH(visit.tmstamp)=12 AND YEAR(visit.tmstamp)=2010)       OR (DAY(visit.tmstamp)=30 AND MONTH(visit.tmstamp)=12 AND YEAR(visit.tmstamp)=2010)       OR (DAY(visit.tmstamp)=31 AND MONTH(visit.tmstamp)=12 AND YEAR(visit.tmstamp)=2010)   ) 
and  
((loginname='Administrator')  or (loginname='121 JUDY YAP CHEO T')  or (loginname='044 Noor Faiza')  or (loginname='109 Jaya'))  
and 
(CONVERT(VARCHAR(10), visit.tmstamp, 105)=CONVERT(VARCHAR(10), event.tmstamp, 105)) 
and 
(visit.loginid=event.loginid) 

當我查詢上面的代碼時,我得到了兩次結果。

如果隊列號為1005的管理員只有一行,我得到了兩次。

任何想法?

如果只有一個訪問行的隊列號為1005,則必須有2個事件行,其中loginid與訪問行的loginid相匹配。

如何縮短呢?

and visit.wstation in (1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 15, 20, 21, 23, 24, 28, 29, 30, 31, 32, 33)
and visit.tmstamp between '20110101' and  '20101201' 

類似的事情可以用其他標准來完成。

避免這種麻煩的一種好方法是不允許編寫不良的工具來生成SQL。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM