sql 不同,需要多个字段

Posted

技术标签:

【中文标题】sql 不同,需要多个字段【英文标题】:sql distinct with multiple fields requried 【发布时间】:2015-06-15 19:36:33 【问题描述】:

我正在使用 Sybase 的 Advantage 数据库服务器。我需要从我的报告中消除重复的 addbatch,但无法仅提取不同的记录。知道我缺少什么吗?

这是我正在使用的

SELECT  DISTINCT
    SI.[addbatch] as [Batch#],
    SI.[current account #] as [Account],
    SI.[status date] as [Status Date],
    SI.[SKU] as [SKU],
    AC.[email address] as [Email]
FROM  salesinventory SI, accounts AC
WHERE  AC.[account #]=SI.[current account #] and [Status Date] > '6/1/2015'

我仍然得到重复的 addbatch。我不确定我哪里出错了!提前致谢!甚至不知道如何用谷歌搜索这个问题!

【问题讨论】:

你能发布一个你得到的结果样本吗? 假设给定的addbatch 有多个 SKU(或任何其他列),当然您会得到该addbatch 的多行。如果您想要不同的 addbatch 行,则不需要在查询中包含导致欺骗的值。 @MartianCodeHound 我得到的结果是: @MartianCodeHound 这是我得到的结果link @MartianCodeHound 我看到了我的想法的漏洞。我需要找到一个不同的领域来处理,因为 addbatch 可以随时与他们的组分开转移。谢谢你让我意识到这一点!回到系统后,我会回复。 【参考方案1】:

问题是您需要检查单个列的唯一性,而这实际上并不是您的代码正在执行的操作。试试这个

SELECT  *
FROM    (SELECT SI.[addbatch] as [Batch#],
         SI.[current account #] as [Account],
         SI.[status date] as [Status Date],
         ETC,
             ROW_NUMBER() OVER (PARTITION BY [Batch#]) AS RowNumber
     FROM   salesinventory SI, accounts AC
     WHERE  AC.[account #]=SI.[current account #] and [Status Date] > '6/1/2015') as rec
WHERE rec.RowNumber = 1

【讨论】:

嗨@DarkNinja955,我试过了,结果是:poQuery: Error 7200: AQE Error: State = 42000;本机错误 = 2115; [iAnywhere 解决方案][Adv​​antage SQL 引擎]未找到预期的词法元素:FROM 您在 SELECT 语句中的列定义之后缺少关键字 FROM。在 SELECT 语句中的 FROM 关键字之后解析表名时出现问题。 -- SQL语句中的错误位置是:142(行:4列:43) 我不得不问,但是您是否将代码中的“ETC”替换为剩余的列?【参考方案2】:

-- 下面的代码是通用的去重复记录,修改以适应你的需要。

select  x.[Well_Name] as nameX
      , x.[TestDate]  as dateX
from (
SELECT count(*) as dup
      ,[Well_Name]

      ,[TestDate]enter code here
  FROM [dbo].[WellTests]
  group by  [TestDate] ,[Well_Name] ) x
  where dup > 1

【讨论】:

【参考方案3】:

如果您想在结果中使用唯一的批次编号,您必须按批次字段分组。

这样的事情应该可以工作:

SELECT
    SI.[addbatch] as [Batch#],
    MIN(SI.[current account #]) as [Account],
    MIN(SI.[status date]) as [Status Date],
    MIN(SI.[SKU]) as [SKU],
    MIN(AC.[email address]) as [Email]
FROM  salesinventory SI, accounts AC
WHERE  AC.[account #]=SI.[current account #] and [Status Date] > '6/1/2015'
GROUP BY
  SI.[addbatch]

您没有说要如何aggregate 其他列,只需将MIN 替换为对您更有意义的内容,例如SUMCOUNT 等。

有一个关于grouping in the documentation的话题。

PS:SELECT DISTINCT(基本上)只是所有列上GROUP BY 的更短方式没有任何聚合

【讨论】:

以上是关于sql 不同,需要多个字段的主要内容,如果未能解决你的问题,请参考以下文章

一个表里有多个字段需要同时使用字典表进行关联显示,如何写sql查询语句

sql拼接两个字段的值空格在哪

SQL多个字段如何去重

mysql不同数据库的数据交换问题

mysql 多个字段有重复数据, 我需要进行去重处理

SQL中查询多个字段时,GROUP BY 要怎么使用?