我想要一些参考,我可以用在我的研究SQL,我目前正在做一份报告,我将隐藏重复的数据,并保留独特的数据。
我的示例是表sales中有三列:
--我现在的进展
FRUIT PURCHASER QUANTITY
APPLE BAN 11
APPLE BEN 2
MANGO BON 9
MANGO BUN 10
MANGO BAAN 10
ORANGE BAIN 5
ORANGE BAON 3-我的目标输出
FRUIT PURCHASER QUANTITY
APPLE BAN 11
BEN 2
MANGO BON 9
BUN 10
BAAN 10
ORANGE BAIN 5
BAON 3谢谢
发布于 2020-08-19 19:28:07
你点了什么菜?您可以使用窗口函数。ROW_NUMBER()是一个窗口函数,它为结果集中的分区中的每一行分配一个顺序整数。
在您的情况下,您需要按结果进行分区,并决定所需行的顺序。
如果您通过降序按数量订购:
select
case when num=1 then FRUIT else '' end as FRUIT, PURCHASER, QUANTITY
from
(
select *,row_number()over(partition by FRUIT order by QUANTITY desc)num
from Table
)x
Order by FRUIT, num如果需要由购买者订购,请尝试以下查询:
select
case when num=1 then FRUIT else '' end as FRUIT, PURCHASER, QUANTITY
from
(
select *,row_number()over(partition by FRUIT order by PURCHASER)num
from Table
)X
Order by FRUIT, num发布于 2020-08-19 19:37:18
首先,了解哪些类型的操作适合数据库,哪些不适合,这一点很重要。虽然这是可以做到的,但这并不是真正合适的。
第二,它不合适的原因是每一行都应该是独立的。除非有显式的order by,否则不会排序结果集。有时候,它们看起来好像是按照特定的顺序来的,但只有order by才能保证。
您可以在SQL中做您想做的事情,但是您必须小心查询的构造方式。基本逻辑是一个case表达式:
select (case when row_number() over (partition by fruit order by purchaser desc) = 1
then fruit
end) as fruit, purchaser, quantity
from t
order by fruit, purchaser;甚至这个版本也有一个潜在的错误:如果一个水果有两行最大数量,那么两个order bys可以以不同的顺序返回绑定值--这意味着水果名出现在第二行。
这意味着一个子查询,因此row_number()只能计算一次,并且可以直接在order by中使用。
select (case when seqnum = 1
then fruit
end) as fruit, purchaser, quantity
from (select t.*,
row_number() over (partition by fruit order by purchaser) as seqnum
from t
) t
order by fruit, seqnum;发布于 2020-08-19 19:37:49
太新了,不好意思。
这可以用SQL来完成,但是,开发可重用的数据集通常对您有好处。您要寻找的演示文稿类型将更典型地在表示层(而不是数据/ sql层)完成。
你在使用哪种报告工具?
https://stackoverflow.com/questions/63493670
复制相似问题