我有两张桌子。标题和订单。标题有title_num。订单有title_num和order_num。每个标题都有很多订单。
我想显示title_num及其所有订单。但我想显示它,以便为多个order_nums显示1个title_num:
title_num| order_num
1 a
1 b
1 c
2 x
2 y
我希望它看起来像:
title_num| order_num
1 a
b
c
2 x
y
我尝试过使用左连接按标题对其进行排序,但这就是我被困住的地方。是否可以像这样显示它?
select t.title_num, o.order_num
from title t
left join order o
on t.title_num=o.title_num
答案 0 :(得分:3)
(没有足够的代表发表评论,所以我会在答案中给出选项)
如果结果与上一行相同,则无法隐藏结果。相反,您可以在代码或报告中处理它。
如果要在报告中显示,则可以在报告管理器中对结果进行分组。
如果您在代码中进行迭代,请使用一个跟踪该列变量的变量。
使用空字符串初始化变量。然后在迭代查询的数据集时:
答案 1 :(得分:2)
您可以使用LAG函数和CASE语句执行此操作。
SELECT CASE WHEN LAG(title_num,1) OVER (PARTITION BY title_num ORDER BY order_num) IS NULL THEN title_num
ELSE ' '
END
,order_num
FROM Order
答案 2 :(得分:1)
使用窗口函数(Oracle术语中的分析函数)row_number()
:
SELECT CASE WHEN row_number() OVER (PARTITION BY title_num
ORDER BY order_num) = 1 THEN
title_num ELSE NULL END AS title_num
,order_num
FROM ord o
ORDER BY o.title_num, order_num;
为什么你JOIN
到title
?有没有订单的标题?否则你可以从查询中省略它。
请勿使用order
之类的保留字作为表名。我在我的解决方案中使用了ord
。
注意我如何在o.title_num
中对ORDER BY
进行表格限定以引用输入列,而不是输出列。