2017-10-05 46 views
-2

我只需要輸出Cnt < 6個值......我可以在沒有將它們插入新表的情況下獲取它們。如何在函數中使用新聲明的列?

SQL查詢

(SELECT t3.State_Name, 
      t2.Customer_Name, 
      sum(t1.Qty) AS qty,(CASE 
            WHEN (row_number()OVER (PARTITION BY t3.state_name 
                  ORDER BY t3.state_name DESC)<6) 
           END)'Cnt' 
    FROM t1 
    JOIN T2 ON (t1.customer_code=t2.customer_code) 
    JOIN t3 ON (t3.Area_code=t1.Area_code) 
    WHERE Cnt<6 
    GROUP BY State_Name, 
      Customer_Name) 

回答

2

有很多例子,在這裏描述瞭如何使用row_number()檢索組中的第n行的答案。

通過...WHERE Cnt < 6可以幫助您瞭解您正在嘗試實現的目標。

如果您似乎試圖檢索每個國家的前六個條目,那麼您希望將您的查詢置於子選擇中,因爲row_number()結果無法在WHERE子句中訪問相同的查詢;做這樣的事情......

SELECT t.State_Name, 
     t.Customer_Name, 
     t.qty 
FROM 
(
    SELECT t3.State_Name, 
      t2.Customer_Name, 
      sum(t1.Qty) AS qty, 
      row_number() OVER (PARTITION BY t3.state_name ORDER BY t3.state_name DESC) AS Cnt 
    FROM t1 
    INNER JOIN T2 ON t1.customer_code = t2.customer_code 
    INNER JOIN t3 ON t3.Area_code = t1.Area_code 
    GROUP BY State_Name,Customer_Name 
) t 
WHERE Cnt < 6 

但是,這不會給你最高量的六國也不會給你在每個國家的最高量的六個客戶。在任何一種情況下,按照與分區列相同的列進行排序會給您帶來非確定性結果;您將需要更改row_number()函數上的ORDER BY以使用sum(qty)

對於後者只是改變ORDER BY ...

SELECT t.State_Name, 
     t.Customer_Name, 
     t.qty 
FROM 
(
    SELECT t3.State_Name, 
      t2.Customer_Name, 
      sum(t1.Qty) AS qty, 
      row_number() OVER (PARTITION BY t3.state_name ORDER BY sum(t1.Qty) DESC) AS Cnt 
    FROM t1 
    INNER JOIN T2 ON t1.customer_code = t2.customer_code 
    INNER JOIN t3 ON t3.Area_code = t1.Area_code 
    GROUP BY State_Name,Customer_Name 
) t 
WHERE Cnt < 6 

對於前者,你也將需要刪除PARTITION BY ...

SELECT t.State_Name, 
     t.Customer_Name, 
     t.qty 
FROM 
(
    SELECT t3.State_Name, 
      t2.Customer_Name, 
      sum(t1.Qty) AS qty, 
      row_number() OVER (ORDER BY sum(t1.Qty) DESC) AS Cnt 
    FROM t1 
    INNER JOIN T2 ON t1.customer_code = t2.customer_code 
    INNER JOIN t3 ON t3.Area_code = t1.Area_code 
    GROUP BY State_Name,Customer_Name 
) t 
WHERE Cnt < 6 
+0

謝謝你,幫我 – Sasank

相關問題