2014-02-25 29 views
0

我有一個包含產品常規信息的表。另一張表具有定價信息,兩個表都是1:n相關的。所以每個產品可能(至少)1到n的價格。設置變量並將它們用於查詢中的輸出

現在我需要在視圖中顯示一些價格以及產品。同樣爲了形成一些行,我不得不增加或者增加一些這些價格。

在我的第一次嘗試中,我對輸出和操作使用了子查詢。哪些工作,但表現是... meh ... 我想過使用變量來設置定價值一次,只是重用它們。如果我能夠一次設置2個或更多變量,情況會更好。但是如何?

我的基本查詢如下所示:

SELECT * 
FROM (
SELECT ProductNr, 
Description, 
Year, ROW_NUMBER() OVER 
(PARTITION BY ProductNr ORDER BY Year DESC) RowRank 
      FROM Products 
    WHERE Year like '2014' 
    AND Manager = 1 
    )sub 
    WHERE RowRank = 1 

一個子查詢基本建立這樣的:

(SELECT Price FROM PricingInfo 
WHERE Manager = 1 
AND year = Products.Year 
AND no = 1 
AND ArticleNr = Products.ProductNr) 

我用

DECLARE @price float 
-- other ones... 

SELECT * 
FROM (
SELECT ProductNr, 
Description, 
@price = (SELECT colXX FROM PricingInfo 
      WHERE Manager = 1 
      AND year = products.Year 
      AND row = 'Y' 
      AND ArticleNr = products.ProductNr), 
@price*1.2 as PriceWithTax 
Year, ROW_NUMBER() OVER 
(PARTITION BY ProductNr ORDER BY Year DESC) RowRank 
      FROM Products products 
    WHERE Year like '2014' 
    AND Manager = 1 
    )sub 
    WHERE RowRank = 1 

進行的嘗試這可能使用這樣的構造?

EDIT [21:09] - @MatBailie要求的一些例子:

ProductNr|Description|Year 
     001| Teddy Bear|2012 
     002| Card game|2013 
     003|  Book|2012 
     003|  Book|2013 

定價-信息:

Category|No|Price|Notice| ID|Year 
1  |1 |35,22|No Tax|001|2012 
1  |2 |38,18|Tax |001|2012 
1  |3 |19,91|Bought|001|2012 
1  |1 |19,91|Bought|002|2013 
+0

你能展示一些示例輸入和輸出數據嗎?我很肯定有更簡單的方法來完成你所需要的,但是我並不完全清楚你的功能需求。這僅僅是「獲得每個產品的最新價格」的情況,然後將它們按原樣顯示並且還乘以1.2? – MatBailie

+0

@MatBailie:添加了他們:) – Qohelet

回答

0

而不是一個參數,你可以試着加入兩個表,然後使用上一個連接表的值。

SELECT * 
    FROM ( 
    SELECT P.ProductNr, 
       P.Description, 
       PInfo.Price, 
       PInfo.Price*1.2 as PriceWithTax 
       P.Year, 
       ROW_NUMBER() OVER (PARTITION BY P.ProductNr ORDER BY P.Year DESC) RowRank 
     FROM Products P 
     INNER JOIN (SELECT ArticleNr, 
          Year, 
          colXX [Price] 
        FROM PricingInfo 
        WHERE Manager = 1 
          AND row = 'Y') PInfo 
      ON P.ProductNr = PInfo.ArticleNr 
      AND P.Year = PInfo.Year 
     WHERE Year = '2014' 
       AND Manager = 1 
    ) SUB 
    WHERE SUB.RowRank = 1 

希望它有幫助!

+0

感謝您的想法。 其實我還沒有想過這樣的解決方案。說實話,我必須添加我在查詢中使用變量非常糟糕,所以這個問題的解決方案將幫助我瞭解如何使用它們 – Qohelet

0
SELECT * 
FROM (
SELECT Products.ProductNr 
     ,Products.[Description] 
     ,P_Info.colXX  AS Price 
     ,P_Info.colXX * 1.2 AS PriceWithTax 
     ,P.[Year] 
     ,ROW_NUMBER() OVER (PARTITION BY P_Info.ProductNr ORDER BY P_Info.[Year] DESC) RowRank 
FROM Products P INNER JOIN PricingInfo P_Info 
ON P.ProductNr = P_Info.ArticleNr 
WHERE P.[Year] LIKE '2014' AND P_Info.[Year] LIKE '2014' 
AND P.Manager = 1 AND P_Info.Manager = 1 
AND P_Info.[ROW] = 'Y' 
)Q 
WHERE RowRank = 1 
+0

與上面的@magnusw相同:我沒有想過但是,但我希望在使用變量時變得更好 – Qohelet

相關問題