【问题标题】:DISTINCT is not workingDISTINCT 不工作
【发布时间】:2010-12-15 16:56:02
【问题描述】:

Ms-Access 中的 SQL 查询

INSERT INTO tblTmpEventLog( TrackingNumber, PartNumber, PartNumberChgLvl,
                            EnteredBy, EventTypeSelected, EventDate )
SELECT DISTINCT tblRevRelLog_Detail.RevRelTrackingNumber,
       tblRevRelLog_Detail.PartNumber, tblRevRelLog_Detail.ChangeLevel,
       [Forms]![frmEventLog_Input]![EnteredBy] AS EnteredBy,
       [Forms]![frmEventLog_Input]![EventTypeSelected] AS EventTypeSelected,
       CDate([Forms]![frmEventLog_Input]![EventDate]) AS EventDate
  FROM tblRevRelLog_Detail LEFT JOIN tblEventLog
    ON (tblEventLog.PartNumber =  tblRevRelLog_Detail.PartNumber)
   AND (tblEventLog.PartNumberChgLvl =  tblRevRelLog_Detail.ChangeLevel)
 WHERE ((([tblRevRelLog_Detail]![RevRelTrackingNumber]) = 
          [Forms]![frmEventLog_Input]![TrackingNumber]))
   AND ((tblEventLog.PartNumber) NOT IN
            (SELECT tblEventLog.PartNumber FROM tblEventLog
              WHERE tblEventLog.EventTypeSelected = 'pn REMOVED From Wrapper'
                AND tblEventLog.TrackingNumber =
                         tblRevRelLog_Detail.RevRelTrackingNumber
                AND tblEventLog.PartNumber =  tblRevRelLog_Detail.PartNumber
                AND tblEventLog.PartNumberChgLvl =  
                         tblRevRelLog_Detail.ChangeLevel
             ));

EnteredBy 的 DISTINCT 关键字,EventTypeSelected 不起作用。我的意思是,当我使用 DISTINCT 关键字时,这些列的数据不显示。

EVENTDATE 工作正常,但我不明白为什么 EneteredBy 和 EventTypeSelected 列不显示它。

谁能告诉我如何处理这个问题?

【问题讨论】:

  • 您已经提出了 14 个问题,但只有 33% 的人选择了答案 - 开始为您的问题挑选答案。
  • 如果您需要帮助,您需要显示整个查询
  • @Jack,好的,我从现在开始选择......
  • @mwolfe02,更新了整个查询
  • 顺便说一句,我用样本表和表格进行了测试。 DISTINCT 不会停止在查询中返回表单数据。

标签: sql ms-access ms-access-2003


【解决方案1】:

可能是查询无法从表单中正确解释为直接作为最终数据类型。但是,在您的日期字段中,您将其包装在函数 CDATE( ... ) 中。因此,SQL 引擎知道结果类型。我建议对其他领域做同样的事情。例如:将 CAST(...您的表单控件...作为 DateTime )作为 OtherColumn 等...我认为 Access 允许强制转换,但不是肯定的。否则,将表单值预拉到声明的数据类型变量中,并在查询 AS OtherColumn 中使用该变量。

除了@Jack 提到的内容之外,您还可以随时返回您的帐户,查看您的历史问题,然后单击任何真正帮助/解决您的问题的答案。有些问题永远不会得到答案,没关系,只要把功劳归功于那些确实提供帮助的人。

【讨论】:

  • 谢谢...它现在正在工作。我现在将为我的旧问题挑选答案
  • 在 SQL 语句中声明对表单控件的任何引用作为参数总是一个好主意。这允许查询优化器做得更好,并且还提高了可靠性(特别是如果任何控件为 Null)。
【解决方案2】:

我过去发现(我不记得这是哪个旧版本的 Access)如果您在 VBA 中设置表单控件的值,然后在查询中使用该控件,则查询将看不到您在 VBA 中设置的值。如果用户正常编辑控件,查询会看到预期值。也许这就是这里发生的事情。

要解决这个问题,您可以声明一个返回所需值的 VBA 函数。例如,而不是这个:

SELECT ..., Forms!MainForm!TextEntry AS TextEntry, ... FROM ...

使用这个:

SELECT ..., GetTextEntry() AS TextEntry, ... FROM ...

还有这个:

Public Function TextEntry() As Variant
    TextEntry = Forms!MainForm!TextEntry
End Function

【讨论】:

  • 你不需要函数,任何强制类型都可以:SELECT ..., "" & Forms!MainForm!TextEntry
  • 不,我的意思是我看到了以下行为(可能在 Access 97 中——我无法在 Access 2003 或 2010 中重现它):(1)将文本框控件值从 X 更改为Y. (2) 运行一个依赖于文本框控件值的查询。 (3) 观察查询看到的是 X 值而不是 Y 值。这是很久以前的事了。可能是在我弄清楚 AccessField 对象或其他一些怪癖之前。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-04-23
  • 1970-01-01
相关资源
最近更新 更多