2017-08-02 55 views
0

數量作爲參數,因此我只能將記錄提取至@quantity。我在FROM之後嘗試的內容沒有那麼有意義,所以下面給出了我的查詢,我需要實現該條件。我嘗試都在WHERE和使用HAVING但無法:提取記錄不大於提供的數量

SELECT prod_id, 
    product, 
    technology, 
    price, 
    quantity 
FROM tbl_product 
------SUM(quantity) <= @quantity 

示例數據:

prod_id product technology price quantity 
1  M1  ST   25.33 10 
2  M2  ST   23.65 50 
3  S1  ST   54.32 90 
4  S2  PY   21.435 30 
5  S3  PY   98.64 110 

IF @Quantity = 150個然後第一3個記錄應被取出。

+1

您可以添加一些示例數據以使問題更清晰嗎? –

+0

什麼是輸入和輸出? – Steven

回答

2

你需要得到一個累積和(基於你的問題中的「提取到」),這是使用窗口函數最有效地完成的。

嘗試:

with cumulative as (
    SELECT prod_id, 
     product, 
     technology, 
     price, 
     quantity, 
     sum(quantity) over (order by <order column>) as cumulative_quantity 
    FROM tbl_product 
) 
select 
    prod_id, 
    product, 
    technology, 
    price, 
    quantity 
from cumulative where cumulative_quantity <= @quantity; 

您需要提供訂單列,表示你要累積相加用什麼順序。

所以當@Quantity = 150,你的結果將是:

prod_id product technology price quantity 
1  M1  ST   25.33 10 
2  M2  ST   23.65 50 
3  S1  ST   54.32 90 

(如果你使用PROD_ID由列的順序)。

+0

感謝您的快速響應,但它沒有給出預期的結果。 – Susang

+0

這是返回前三行是正確的,但在最後一行數量是150,因爲我們有90實際。但是我在''中使用了'prod_id'' – Susang

+0

嘗試使用上面編輯的代碼。如果您有任何問題,請告訴我。 –

0

假設你要取前N個記錄被prod_id的累積總和爲有序小於@quantity,那麼你可以嘗試以下查詢:

SELECT 
    prod_id, 
    product, 
    technology, 
    price, 
    quantity 
FROM tbl_product t1 
WHERE (SELECT SUM(t2.quantity) FROM tbl_product t2 
     WHERE t2.prod_id <= t1.prod_id) < @quantity 
0

基於產品,你可以找到如下

SELECT distinct prod_id, 
     product, 
     technology, 
     price, 
FROM tbl_product 
where product in (
SELECT product 
FROM tbl_product 
GROUP BY product 
HAVING SUM(quantity) <= @quantity)