【问题标题】:get only one row of the same name, index, amount but different code只得到一行同名、同名、同名、同名但代码不同的行
【发布时间】:2012-01-09 14:20:23
【问题描述】:

我有查询:

select distinct index, name, code, amount as amount_min 
from sales s 
where (amount = 
(
    select mindex(s1.amount) 
    from sales s1 
    where  s1.name = s.name
)) 
order by s.name

查询效果很好,但我想修改它们,以便当几行中的列索引、代码、数量相同时,只显示第一行。其余的(尽管不同的代码列)应该被忽略。有人可以帮我吗?

【问题讨论】:

  • 如果您需要一致性,您需要定义“第一”行的含义。否则,您可以从当前查询的结果中查询并添加一个“行号”(Oracle 将是 ROWNUM)列,并让您​​的包装选择选择具有 MIN 行号的行。
  • 请张贴一个简短的示例,说明您目前正在获得什么以及您想获得什么。如果您也可以包含相关的表结构,那将很有帮助。

标签: sql select distinct


【解决方案1】:

由于不知道是oracle、sql server、sybase ase等,你的做法是这样的:

第 1 步:将数据插入带有标识列的临时表中

select distinct counter = identity(10), index, name, code, amount as amount_min
into #t1
from sales s 
where (amount = 
(
    select mindex(s1.amount) 
    from sales s1 
    where  s1.name = s.name
)) 
order by s.name

第 2 步:进行所需的选择

select index, name, code, amount_min from #t1
where counter in (select min(counter) from #t1 group by index, name, amount_min)

第 3 步:删除临时表

drop table #t1

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2022-01-16
    • 1970-01-01
    • 2012-06-06
    • 1970-01-01
    • 2015-11-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多