在SQL结果上添加和排序行

在SQL结果上添加和排序行,sql,oracle,Sql,Oracle,我正在寻找一种在SQL结果Oracle中始终获取定义行数的方法。 让我告诉你我遇到了什么。 这是我桌子的摘录 |----------|----------|----------| | DATE | NUMBER | TYPE | |----------|----------|----------| | 12/01/13 | 2 | A | | 12/01/13 | 4 | B | | 12/02/13 | 3

我正在寻找一种在SQL结果Oracle中始终获取定义行数的方法。 让我告诉你我遇到了什么。 这是我桌子的摘录

|----------|----------|----------|
|   DATE   |  NUMBER  |   TYPE   |
|----------|----------|----------|
| 12/01/13 |    2     |    A     |
| 12/01/13 |    4     |    B     |
| 12/02/13 |    3     |    D     |
| 12/02/13 |    1     |    A     |
| 12/02/13 |    5     |    X     |
|----------|----------|----------|
对于所选日期,我需要在结果中始终获得5行,因此使用新行和空值来完成它。 以下是我希望2013年12月1日的结果

|----------|----------|----------|
|   DATE   |  NUMBER  |   TYPE   |
|----------|----------|----------|
| 12/01/13 |    1     |   null   |
| 12/01/13 |    2     |    A     |
| 12/01/13 |    3     |   null   |
| 12/01/13 |    4     |    B     |
| 12/01/13 |    5     |   null   |
|----------|----------|----------|
另一天的想法是一样的。我和很多工会做了一些事情,但效果不太好

那么,您将如何编写这个SELECT查询呢


谢谢

在我的脑海里,像这样的东西应该有用:

CREATE TABLE #Numbers ( Number INT );
INSERT #Numbers (Number) VALUES (1), (2), (3), (4), (5);

SELECT Dates.Date, #Numbers.Number, Type
FROM #Numbers, (SELECT DISTINCT Date FROM MyTable) AS Dates
LEFT JOIN MyTable ON MyTable.Date = Dates AND MyTable.Number = #Numbers.Number

编辑:此示例可能不适用于Oracle。在我写了Oracle SQL之后,我才意识到问题是关于它的。不管怎样,把答案留在这里。如果有人知道如何将其翻译成Oracle SQL语法,请随意编辑我的答案。

分区外部连接将填补空白

with cte_number_list as (
  select     rownum my_number
  from       dual
  connect by level <= 5)
select t.my_date,
       l.my_number,
       t.type
from   cte_number_list l left outer join
       my_table        t partition by (t.my_date)
                         on l.my_number = t.my_number;

你得先试试这个SQL。如果您遇到困难,请告诉我们。Oracle中有一种全新的专门的数据加密语法,而且似乎没有人听说过,所以我继续发布了一个分区外部连接示例。在其他RDBMS中,还有许多其他的方法也适用