2

我有两张桌子。标题和顺序。标题有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
4

3 回答 3

3

(没有足够的代表发表评论,所以我会在答案中给出选项)

如果结果与上一行相同,则无法隐藏结果。相反,您将在代码或报告中处理它。

  • 如果您在报告中显示它,您可以在报告管理器中对结果进行分组。

  • 如果您在代码中进行迭代,请使用一个变量来跟踪该列变量。

    用空字符串初始化变量。然后当您迭代查询的数据集时:

    1. 如果当前行值与变量的值相同,则显示空白。否则,显示行值。
    2. 将变量设置为当前行的值。
于 2013-05-28T22:28:29.057 回答
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

SQL 小提琴演示

于 2013-05-28T23:03:12.537 回答
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;

->SQL 小提琴

你为什么JOIN要这样做title?有没有顺序的标题?否则,您可以从查询中省略它。

不要使用保留字,order如表名。我ord在我的解决方案中使用。

请注意我如何通过表格限定o.title_numORDER BY引用输入列,而不是输出列。

于 2013-05-28T23:04:50.300 回答