2015-06-16 83 views
0

我有一個關於如何對我的查詢輸出進行排序的SQL問題。同時按兩列排序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等等結尾......而我是Ordering By Referred_From和id號碼。我的輸出數據是正確的,但是格式不正確。這是一個簡單的解決方案,還是我將不得不重新做我如何去做這件事的基礎?

在此先感謝,我期待着弄明白這一點。

+1

只有在訂購時才能做到這一點。您將不得不更改您的選擇語句 –

+0

這不僅僅是一個「排序」問題。你顯示你的查詢返回*六*行;無法使用ORDER BY子句將其轉換爲* three *行。 (你不知道如何去做,因爲這是不可能的。)你需要對查詢做出更重大的改變,或者處理客戶端結果的「重新格式化」。 – spencer7593

回答

1

感謝您的幫助!我能夠使用CTE最有效地完成它。我也用盧卡斯·埃德的方式作爲練習,所以謝謝你發表。

長話短說我這樣做:

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」,所以我不得不用的東西連接兩個在一起,它完美地工作。

再次感謝,我真的很感激提示。

0

您需要將這些結果作爲2個獨立的結果集,並將row_number()(向...排序)添加到它們兩個中,以便兩個結果都具有數字1,2 ...爲了通緝令。

然後使用行號連接結果集,並在全部外連接中包含更多行時使用完全外連接。

+0

這就是你在SQL Server中的做法,其他數據庫平臺至少在語法上可能有一些差異 –

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 
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