为什么我的SQL Server查询没有返回正确的数据?

时间:2012-06-19 19:54:35

标签: sql sql-server sql-server-2008

我需要帮助弄清楚为什么我没有通过此查询获得任何结果。

我的老板已经提取了数据,所以我知道它就在那里。但出于某种原因,我没有得到任何东西:

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

编辑:你如何使用索引来加速查询?

更新:更多:

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,所以使用索引帮助了很多。

在MSSQL Server管理工作室中,我刚刚运行了一个查询来获取该ID#:

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

3 个答案:

答案 0 :(得分:2)

假设您在没有where子句的情况下获得结果,问题就在那里。我现在还没有完全没有数据要查看的地方。但在类似情况下,最佳做法是逐个评论您的过滤器并检查结果。无论如何,我的感觉是问题出在日期范围内。试试:

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年(这是有意义的,以小时为单位检查 - 最近的事情)。

答案 1 :(得分:2)

用于发布数据的Thanx - 你错误的一年:

QUERY:

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

示例数据:

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 

哎呀;)

我猜这可能是整个问题。如果在查询中更改年份,请告诉我们!

答案 2 :(得分:1)

查看您的输入日期格式(在您的示例数据中)。一个是31:52.4 42:26.6。或31:52.4和LastDate是42:26.6(眼球)。日期似乎有问题。 出席日期的出现数据为'31:52.4'

这些数据来自哪里?

您是否在没有where子句的情况下运行查询,或者是否提供给您?

最重要的是,表中的数据类型是什么?

* 编辑 - 添加* 感谢您修复数据 - 如果您希望通过查询返回示例数据,则日期范围中的错误年份。

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

此外,您的日期在查询和数据之间采用不同的格式,它仍然会返回并且不是实际问题,但可能会更容易发现您的错误。

此查询也不会根据surveyname条件返回样本数据。 ABCSurvey列名在之前的数据中,我不再看到了。我现在看到FEDSUrveyname,所以我不确定要谈论哪一个 - 但是在你的编辑'718184'被列为名为ABCSurveyName的字段中的数据之前,就像在单独的字段中列出的'EBAY'一样。数据在一个字段中没有一起存在,但您的查询条件是 -      ABCSurveyName如'EBAY4263-718184%'

我不确定实际的表结构是什么。我猜测应该打破这种情况。      ABCSurveyName喜欢'%718184%' SuplierId似乎是42,所以我认为你不需要包括EBAY部分。

我猜您需要将WHERE CLause更改为

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

同样,我在假设42是EBAY时可能是错的,因为我没有看到结构,因此您可能需要添加SupplierName ='EBAY'。

所以,为了帮助你进一步发挥作用,如果这不起作用,我需要看到表格结构,因为我在这里做了很多推论。是来自数据库的样本数据,还是从文件中复制它?如果数据库表来自文件,则从数据库表中发布实际数据。如果有效,请告诉我。 :)

* 编辑来自OP的新信息

看起来你可能还有另一张桌子。示例数据具有“ResponseID”,它不包含在架构中。我想你需要加入。

请回答以下问题:样本数据是什么?它从哪里来的?您希望从查询中返回此数据吗? 感谢

并尝试解决此问题:(从条款中删除调查名称部分,查看结果并查看是否需要缩小范围)

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