我正在尝试在Sql上实现以下目标,即通过在查询中创建随机列(如索引)来对查询进行排序,这听起来很简单,但我无法弄清楚如何为每一行赋予所需的位置, gona展示我的问题。
到目前为止,我完成的工作是这样的:
我是通过在此之间进行子查询和联合来完成此操作的,但是现在我想创建一列(如索引)来按我想要的顺序对表进行排序,但是我不知道如果某个方法能够帮助将如何提高它,我会怎么做:
如何创建索引列,并根据需要为该列的每一行提供所需的值?
乔纳森
Bananas 10
Orange 6
Potato 2
乔安娜
Bananas 3
Orange 1
Juice 3
标记
Potato 5
Peanuts 7
Luigi
Potato 10
Orange 10
小计12
小计18
小计20
小计7
...
...
OutPutDesired
ColumnA ColumnB ColumnC
乔纳森
香蕉10
橙色6
土豆2
小计 18
乔安娜橙1
果汁3
小计 4
马克
花生5
土豆7
小计 12
路易吉
土豆10
橙色10
小计 20
”
答案 0 :(得分:0)
您可以通过以下方式执行此操作:
表格
create table ex1 (
person text,
food text,
amount int
);
数据
insert into ex1 values
('Jonathan', 'Bananas', 10),
('Jonathan', 'Orange', 6),
('Jonathan', 'Potato', 2),
('Joana', 'Bananas', 3),
('Joana', 'Orange', 1),
('Joana', 'Juice', 3),
('Mark', 'Potato', 5),
('Mark', 'Peanuts', 7),
('Luigi', 'Potato', 10),
('Luigi', 'Orange', 10);
查询
with subtotals as (
select person, sum(amount) as subtotal
from ex1 group by person
),
combined as (
select person, food, amount from ex1
union all
select person, 'Subtotal' as food, subtotal as amount from subtotals
)
select * from combined order by person, food;
输出
person | food | amount
----------+----------+--------
Joana | Bananas | 3
Joana | Juice | 3
Joana | Orange | 1
Joana | Subtotal | 7
Jonathan | Bananas | 10
Jonathan | Orange | 6
Jonathan | Potato | 2
Jonathan | Subtotal | 18
Luigi | Orange | 10
Luigi | Potato | 10
Luigi | Subtotal | 20
Mark | Peanuts | 7
Mark | Potato | 5
Mark | Subtotal | 12
希望您能得到想要的东西。只要您按字母顺序排列的食物不超过小计,此方法就起作用。如果这样做,您可以更改查询以使用单词ZZ-Subtotal-ZZ
或类似的字词来显示在某个人的食物清单的末尾。
工作示例在这里:https://rextester.com/VGO98471