我有一个关于我的查询输出是如何排序的SQL问题。
以下是输出现在的样子:
REFERRED_FROM REFERRED_FROM_COUNT REFERRED_TO REFERRED_TO_COUNT
sample sample number
sample sample number
sample sample number
sample sample number
sample sample number
sample sample number
这是我想要的输出:
REFERRED_FROM REFERRED_FROM_COUNT REFERRED_TO REFERRED_TO_COUNT
sample sample number sample sample number
sample sample number sample sample_number
sample sample number sample sample number
我对SQL脚本很新,但我很确定这是可行的,我不知道为什么我无法理解它。
现在我的select语句中有4个case语句,以Referred_From,Referred_From_Count等结尾......我正在按Referred_From和id号排序。我的输出数据是正确的,然而格式化是关闭的。这是一个简单的解决方案,还是我必须重新做一下这个问题的基础?
在此先感谢,我期待着解决这个问题。
答案 0 :(得分:1)
这是一个可能的解决方案:
SELECT referred_from, referred_from_count, referred_to, referred_to_count
FROM (
SELECT referred_from, referred_from_count, rownum r
FROM my_table
WHERE referred_from IS NOT NULL
AND referred_from_count IS NOT NULL
) t1
FULL OUTER JOIN (
SELECT referred_to, referred_to_count, rownum r
FROM my_table
WHERE referred_to IS NOT NULL
AND referred_to_count IS NOT NULL
) t2
ON t1.r = t2.r
另一种方法是使用JamesZ建议的ROW_NUMBER()
窗口函数,但我怀疑它会慢一点:
SELECT referred_from, referred_from_count, referred_to, referred_to_count
FROM (
SELECT referred_from, referred_from_count, ROW_NUMBER() OVER (ORDER BY id) r
FROM my_table
WHERE referred_from IS NOT NULL
AND referred_from_count IS NOT NULL
) t1
FULL OUTER JOIN (
SELECT referred_to, referred_to_count, ROW_NUMBER() OVER (ORDER BY id) r
FROM my_table
WHERE referred_to IS NOT NULL
AND referred_to_count IS NOT NULL
) t2
ON t1.r = t2.r
答案 1 :(得分:1)
感谢您的帮助!我能够使用CTE最有效地完成它。我也用Lukas Eder的方式练习,所以感谢你发帖。
长话短说我做到了:
WITH ref_from as ........
WITH ref_to as ..........
SELECT Referred_From, Referred_From_Count, Referred_To, Referred_To_Count
FROM (select rownum rowfrom, ref_from.* from ref_from) t1,
(select rownum rowto, ref_to.* from ref_to) t2
WHERE rowfrom = rowto;
我创建了' rowfrom'和' rowto'所以我有一些东西加入这两个并且它完美地工作。
再次感谢,我非常感谢这些提示。
答案 2 :(得分:0)
你需要将它们作为2个单独的结果集,并将row_number()添加到(它们的顺序为...)两个结果集,以便两个结果都有一个数字1,2 ... for想要的订单。
然后将结果集与行号连接,并使用完全外连接,以防它们中的任何一个包含更多行。
答案 3 :(得分:0)
我认为最好提供查询。看起来你正在尝试做类似的事情:
select Id, Referred_from ,COUNT(Referred_from),Referred_to,COUNT(Referred_to)
group by id, referred_from,referred_to
order by Id,referred_from