【问题标题】:Can SQL remove duplicates within fields rather than records?SQL 可以删除字段中的重复项而不是记录吗?
【发布时间】:2021-11-16 07:37:18
【问题描述】:

SQL 是删除字段中重复项的正确工具吗?

我有一个访问数据库,我希望删除每条记录的同一字段中数据相同的字段。

所以,例如我可能有这个:

-------------------------------
|PN   |SU     |DE        |TD  |
-------------------------------
|1001 |A      |Widget    |Red |
|1002 |A      |WidgetS   |Red |
|1003 |A      |WidgetL   |Red |
-------------------------------

这是

的结果
SELECT [PN],[SU],[DE],[TD] FROM tbl WHERE ([PN] IN ('1001','1002','1003'))

在这种情况下,我不希望从 [SU][TD] 字段返回任何内容,因为它们都包含相同的数据。

是否可以对查询执行任何操作,以便在所有记录中的数据相同的字段中不返回任何内容,从而使结果看起来像这样?

------------------
|PN   |DE        |
------------------
|1001 |Widget    |
|1002 |WidgetS   |
|1003 |WidgetL   |
------------------

SQL 是执行此操作的正确工具,还是我最好在结果出来后对这些数据进行后处理???

【问题讨论】:

  • 所以如果TD 有不同的值,您会想查看数据,但如果它们都相同,您就不想了吗?
  • 对于给定的示例,您所要做的就是不在查询中包含 SU 和 TD 字段以获得所需的输出。不清楚你想完成什么。
  • 构建报表并使用文本框 HideDuplicates 属性。
  • @June7 问题是我不知道不要在查询中包含 SUTD 字段,因为我不知道它们会有重复的值!如果我首先知道这一点,我会将它们排除在查询之外……@Nick.McDermaid 是的,你是对的;如果它们包含的数据在所有字段中都不相同,我希望看到它们。
  • 查询中包含的字段不能是动态的 - 它要么存在,要么不存在。查询不打算作为演示工具。正如我所说,建立一个报告。

标签: sql ms-access


【解决方案1】:

正如其中一位评论者所指出的,查询的结果具有固定数量的字段,您无法动态更改它。但是,如果您觉得它有用,您可以在所有结果相同的情况下使字段内容变为“无效”。 “Void”可以是空字符串、Null 或任何你想要的。您可以使用子查询作为每个字段的结果来实现此目的。执行此操作的 SQL 代码如下:

SELECT   [PN]
       , Iif((SELECT Min(tbl.SU) <> Max(tbl.SU) FROM tbl WHERE ([PN] IN ('1001','1002','1003')) GROUP BY tbl.SU), tbl.SU, "") AS [SU]
       , [DE]
       , Iif((SELECT Min(tbl.TD) <> Max(tbl.TD) FROM tbl WHERE ([PN] IN ('1001','1002','1003')) GROUP BY tbl.TD), tbl.TD, "") AS [TD]
FROM tbl 
WHERE ([PN] IN ('1001','1002','1003'))

如果您想了解更多关于 SQL 聚合函数的信息,您可以查看 Access 文件中的示例查询,该文件可从网站 LightningGuide.net 下载。

如果 TD 和 SU 的结果从不为 Null,则上述代码运行良好。如果你可以得到 Null 结果,你也可以得到相同的结果,但你需要编写稍微复杂的表达式,而不是:

Min(xxx) <> Max(xxx)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-07-16
    • 2021-02-13
    • 1970-01-01
    • 2016-01-07
    • 2010-10-24
    • 1970-01-01
    相关资源
    最近更新 更多