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