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 解决方案][Advantage 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
替换为对您更有意义的内容,例如SUM
或COUNT
等。
有一个关于grouping in the documentation的话题。
PS:SELECT DISTINCT
(基本上)只是所有列上GROUP BY
的更短方式没有任何聚合。
【讨论】:
以上是关于sql 不同,需要多个字段的主要内容,如果未能解决你的问题,请参考以下文章