2012-06-19 4 views
-1

왜 내가이 쿼리로 결과를 얻지 못하고 있는지 알아내는 데 도움이 필요합니다.SQL Server 쿼리가 올바른 데이터를 반환하지 않는 이유는 무엇입니까?

내 상사가 이미 데이터를 가져 와서 알고 있습니다. 그러나 어떤 이유로 난 아무것도 못하고 있어요 :

SELECT SessionSID as 'ResponseID' 
    , TargetID 
    , TargetName 
    , SurveyNumber 
    , ABCSurveyName 
    , SurveyID as 'RedirectedSurveyID' 
    , SupplierID 
    , SupplierName 
    , RespondentID 
    , PID 
    , IPAddress 
    , IsLive 
    , EntryDate 
    , LastDate 
    , LK_ResponseStatusID as 'Response Status Code' 
    , ClientLK_ResponseStatusID as 'Client Response Status Code' 
    , LK_SupplierLinkTypeName 
    , ProjectID 
    , ParentSID 
    , TargetCPI 
    , SupplierCPI 
    , DefaultCPI 
FROM BI_Sessions (nolock) 
WHERE EntryDate BETWEEN '06-07-2012' AND '06-08-2012' 
    AND ABCSurveyName like 'EBAY4263-718184%' 
    AND SupplierID = 42 

업데이트 된 데이터가 여기에있다 (나는 그것이 오래 미안 해요 알고) :

ResponseID TargetID TargetName SurveyNumber ABCSurveyName RedirectedSurveyID SupplierID SupplierName RespondentID PID IPAddress IsLive EntryDate LastDate Response Status Code Client Response Status Code LK_SupplierLinkTypeName ProjectID ParentSID TargetCPI SupplierCPI DefaultCPI 
6dd94974-9e1b-44ce-8a3e-e1680f921a2e -1 NULL 13958 Tracking NO_Kund_Cint4005 12963 42 EBAY 31962330 08a945eb-d780-4baa-892a-d4132e59afb5 80.213.119.232 1 2012-06-07 00:01:51.420 2012-06-07 00:02:05.327 3 1 Targeted/Reuse Supplier-Account Only 4637 c847ad2f-9a9f-4a81-8da3-a74d49f8143e 3 10 10 
c2d53463-f81b-4156-87a7-e70203a4fc0e -1 NULL 12200 Tracking NO_Kund_Cint4002 11205 42 EBAY 2513971 0e9d0e01-9009-40a8-a42e-65e1e6d4b1f8 85.167.23.63 1 2012-06-07 00:03:38.220 2012-06-07 00:03:55.143 3 38 Targeted/Reuse Supplier-Account Only 3857 4f74bbaf-0bb3-4430-9529-72c5dff36d3a 3 10 10 

편집 : 어떻게 속도로 인덱스를 사용합니까 검색어?

UPDATE : 더 :

SessionID int no 4 10 0 no (n/a) (n/a) NULL 
SessionSID nvarchar no 128     yes (n/a) (n/a) SQL_Latin1_General_CP1_CI_AS 
AccountID int no 4 10 0 yes (n/a) (n/a) NULL 
RespondentID int no 4 10 0 yes (n/a) (n/a) NULL 
SurveyID int no 4 10 0 yes (n/a) (n/a) NULL 
SurveyNumber int no 4 10 0 yes (n/a) (n/a) NULL 
ABCSurveyName nvarchar no 256     yes (n/a) (n/a) SQL_Latin1_General_CP1_CI_AS 
SupplierID int no 4 10 0 yes (n/a) (n/a) NULL 
SupplierName nvarchar no 128     yes (n/a) (n/a) SQL_Latin1_General_CP1_CI_AS 
TargetID int no 4 10 0 yes (n/a) (n/a) NULL 
TargetCPI float no 8 53 NULL yes (n/a) (n/a) NULL 
ClientCPI float no 8 53 NULL yes (n/a) (n/a) NULL 
QuotaCPI float no 8 53 NULL yes (n/a) (n/a) NULL 
SupplierCPI float no 8 53 NULL yes (n/a) (n/a) NULL 
DefaultCPI float no 8 53 NULL yes (n/a) (n/a) NULL 
EntryDate datetime no 8     yes (n/a) (n/a) NULL 
LastDate datetime no 8     yes (n/a) (n/a) NULL 
LK_RespondentPathID int no 4 10 0 yes (n/a) (n/a) NULL 
LK_ResponseStatusID int no 4 10 0 yes (n/a) (n/a) NULL 
IsLive bit no 1     yes (n/a) (n/a) NULL 
PID nvarchar no 256     yes (n/a) (n/a) SQL_Latin1_General_CP1_CI_AS 
IPAddress nvarchar no 32     yes (n/a) (n/a) SQL_Latin1_General_CP1_CI_AS 
ClientLK_ResponseStatusID int no 4 10 0 yes (n/a) (n/a) NULL 
ParentSID nvarchar no 128     yes (n/a) (n/a) SQL_Latin1_General_CP1_CI_AS 
SurveyQualificationID int no 4 10 0 yes (n/a) (n/a) NULL 
TargetName nvarchar no 128     yes (n/a) (n/a) SQL_Latin1_General_CP1_CI_AS 
SupplierLinkID int no 4 10 0 yes (n/a) (n/a) NULL 
LK_SupplierLinkTypeID int no 4 10 0 yes (n/a) (n/a) NULL 
LK_SupplierLinkTypeName nvarchar no 128     yes (n/a) (n/a) SQL_Latin1_General_CP1_CI_AS 
EntryType int no 4 10 0 yes (n/a) (n/a) NULL 
ExitType int no 4 10 0 yes (n/a) (n/a) NULL 
ProjectID int no 4 10 0 yes (n/a) (n/a) NULL 
ProjectName nvarchar no 128     yes (n/a) (n/a) SQL_Latin1_General_CP1_CI_AS 
CreateUserID int no 4 10 0 yes (n/a) (n/a) NULL 
CreateDate datetime no 8     yes (n/a) (n/a) NULL 
UpdateUserID int no 4 10 0 yes (n/a) (n/a) NULL 
UpdateDate datetime no 8     yes (n/a) (n/a) NULL 
LK_RecordStatusID bit no 1     yes (n/a) (n/a) NULL 
LK_CountryLanguageID int no 4 10 0 yes (n/a) (n/a) NULL 
LK_CountryLanguageName nvarchar no 128     yes (n/a) (n/a) SQL_Latin1_General_CP1_CI_AS 
SurveyAccountName nvarchar no 128     yes (n/a) (n/a) SQL_Latin1_General_CP1_CI_AS 
SurveyAccountID int no 4 10 0 yes (n/a) (n/a) NULL 

편집 : 나는 내 상사의 도움을 필요로하고, 지금은 모두가 알아 냈입니다. ID를 추출 할 수있는 또 다른 유용한 테이블이 있었기 때문에 색인을 사용하면 많은 도움이되었습니다. 당신은 문제가 정확히이 where 절없이 결과를 얻을 수 있다고 가정

select * from Surveys (nolock) where ABCSurveyName = '718184 Multicultural Shop ' 
+7

몇 가지 샘플 데이터를 게시 할 수 있습니까? 오류가 있습니까? 이 쿼리에서 당신은 무엇을 기대하고 있습니까? – Taryn

+1

'06 -07-2011 00:00:01 '과 '06 -07-2011 10:00:01'사이에 EntryDate가있는 BI_sessions의 레코드가 하나 이상 있습니까 (2011 년 참고). 'EBAY4263-718184 %'와 같은 ABCSurveyName이 있고 SupplierID는 42입니다. * 예상 * 할 레코드 중 하나를 인쇄하여 확인하십시오. 무엇이 잘못되었는지 알아 내기 위해 SSMS GUI에서이 쿼리의 다른 변형을 잘라내거나 붙여 넣는 데 2 ​​분 이상 걸리지 않아야합니다. – paulsm4

+6

왜 'nolock'을 사용하고 있습니까? 왜 비표준 datetime 형식을 사용하고 있습니까? 대신''yyyymmdd hh : mm : ss ''를 시도 했습니까? –

답변

1

샘플 데이터에서 입력 날짜 형식을 확인하십시오. 하나는 31 : 52.4 42 : 26.6입니다. 또는 31 : 52.4이고 LastDate는 42 : 26.6 (눈알 껴보기)입니다. 날짜에 문제가있는 것 같습니다. 입국 날짜가 '31 : 52.4 '입니다.

이 데이터의 출처는 어디입니까?

where 절을 사용하지 않고 쿼리를 실행 했습니까? 아니면 이것을 제공 했습니까?

가장 중요한 것은 테이블의 데이터 유형은 무엇입니까?

* 편집 - 쿼리와 샘플 데이터를 반환 할 것으로 예상하는 경우는 날짜 범위에 잘못된 년이 - 데이터를 고정 감사 ON * 추가.

WHERE EntryDate BETWEEN '06-07-2012 00:00:01' AND '06-07-2012 10:00:01' 

또한, 날짜는 아직 반환하고 실제 문제가되지 않습니다 쿼리 및 데이터 사이의 다른 형식에 있지만,보다 쉽게 ​​실수를 발견 할 수 있도록 수 있습니다.

이 쿼리는 surveyname 조건을 기반으로 한 샘플 데이터를 반환하지 않습니다. 열 ABCSurvey 이름이 이전에 데이터에 있었는데 더 이상 표시되지 않습니다.이제 FEDSUrveyname을 볼 수 있으므로 어느 부분에 대해 말할지 모르겠다. 편집하기 전에 '718184'라는 필드가 ABCSurveyName이라는 필드에 데이터로 나열되고 'EBAY'는 별도의 필드에 나열됩니다. 하나의 입력란에 데이터가 2 개 포함되어 있지만 쿼리 조건에 ' '과 같은 ABCSurveyName이 표시되지 않았습니다.

실제 테이블 구조가 무엇인지 알 수 없습니다. 나는 그 상태가 깨져야한다고 생각하고있다. ABCSurveyName LIKE '% 718184 %' SuplierId가 42로 보이므로 EBAY 부분이 필요하다고 생각하지 않습니다.

내 생각 엔 내가 구조를 표시하지 않는 한 당신이해야 할 수도 있습니다, 그래서 나는, (42)는 EBAY 인에 대한 내 가정이 잘못 될 수있다, 당신은 다시

WHERE EntryDate BETWEEN '06-07-2012 00:00:01' AND '06-07-2012 10:00:01' --but i reccomend 'YYYY-MM-DD ...' format for consistency 
AND ABCSurveyName like '%718184%' --this is may even be ABCSurveyName = 718184 
AND SupplierID = 42 

WHERE 절을 변경해야 할 것입니다 SupplierName = 'EBAY'에 추가하십시오.

이렇게해도 작동하지 않는다면 더 이상 도움이되도록 여기에서 많은 추측을하기 때문에 테이블 구조를 볼 필요가 있습니다. 데이터베이스의 샘플 데이터가 있습니까? 아니면 파일에서 복사합니까? 파일의 경우 데이터베이스 테이블에서 실제 데이터를 게시하십시오. 작동하는지 알려주세요. : 당신이없는 다른 테이블이있을 수 있습니다처럼 보이는

* EDIT 영업 이익

에서 새 정보로부터 ON 추가 할 수 있습니다. 샘플 데이터에는 스키마에 포함되지 않은 'ResponseID'가 있습니다. 나는 당신이 가입 할 필요가 있다고 생각합니다.

다음 질문에 답하십시오. 샘플 데이터가 무엇입니까? 어디에서 왔습니까? 쿼리에서 반환 할 데이터입니까? 감사

시도 그냥이 : 데이터를 게시

WHERE EntryDate BETWEEN '06-07-2012' AND '06-08-2012' 
    --AND ABCSurveyName like 'EBAY4263-718184%' 
    AND SupplierID = 42 
+1

실제로, 나는 두 개의 날짜 필드가 있다고 생각합니다. 하나는 (entrydate) "31 : 52.4"이고 다른 하나는 "42 : 26.6"입니다. 내가 추측 한 것은 그 필드가 datetime이 아닌 시간 데이터 인 것처럼 보입니다. 그러나 그럴 경우 자신의 데이터가 정말로 엉망이 될 것이라고 추측해야합니다. – Chud

+1

그래, 나는 그것을보고 내가 쓴 것을 바로 잡았다. – user1166147

+0

예 데이터에 문제가 있습니다. 이걸 보면서 최대한 빨리 고쳐주게. – Coffee

2

: 그래서 ID 번호를 얻기 위해 같은

는 MSSQL 서버 관리 스튜디오에서 난 그냥 쿼리를 실행했습니다. 지금은 데이터가없는 정확한 위치를 볼 수 없습니다. 그러나 비슷한 경우에는 필터를 하나씩 댓글을 작성하고 결과를 확인하는 것이 가장 좋습니다. 어쨌든 내 느낌은 문제가 날짜 범위에 있다는 것입니다. 로 시도 :

WHERE EntryDate BETWEEN '2011-06-07 00:00:01' AND '2011-06-07 10:00:01' 

또는

WHERE EntryDate BETWEEN '2011-07-06 00:00:01' AND '2011-07-06 10:00:01' 

당신은 06과 07 (DD-MM-YYYY 또는 MM-DD-YYYY)를 나타냅니다 알고 있기 때문이다.

(예상치 못한 경우) 약 13 일 전의 경우 2012 년으로 변경하십시오 (??? -quite- 최근에 대해 시간별로 확인하는 것이 좋습니다).

+0

고마워요, 또한 나를 위해 기본 MSSQL 날짜를 찾아 가리키는. 그것은 dd-MM-yyyy입니다. – Coffee

+1

그냥 추측합니다. 문제가 해결 되었습니까? –

+0

글쎄 아직은 솔루션이 가까이 있다고 확신합니다! – Coffee

2

고맙습니다을 (결과를 검토, 절 이리저리 조사의 이름 부분을 제거하고 필요 더 좁혀 할 경우 참조) - 당신은 잘못이 년 :

QUERY :

WHERE EntryDate BETWEEN '06-07-2011 00:00:01' AND '06-07-2011 10:00:01' 

SAMPLE 자료 :

2012-06-07 00:01:51.420 2012-06-07 00:02:05.327 3 
2012-06-07 00:03:38.220 2012-06-07 00:03:55.143 3 

아가씨)

나는 아마 그게 전부 문제라고 생각합니다. 검색어에 대한 연도가 변경되면 알려주세요.

+0

안녕하세요 폴, 고마워요 그 부분을 해결! – Coffee

+0

안녕하세요 Paul, 답변 해 주셔서 감사합니다. 내가 그 아래에 게시 한 결과와 정확히 일치하는 쿼리로 편집했습니다. 따라서 현재 날짜는 월 단위로 표시됩니다. – Coffee

+1

@Adel - Cool. 그리고 "ABCSurveyName"은 어떻습니까? 샘플 데이터에서 "EBAY4263-718184 % '"와 (와) 같은 행이 없습니다. – paulsm4

관련 문제