2015-08-03 76 views
3

MSSQL,我需要傳遞一組查詢參數......有沒有什麼辦法可以一次完成!MSSQL查詢優化

我有2個數據源CD和VD。 我有產品的數據:產品A,B,C ...中的數據源CD 我有產品的數據:產品1,2,3 ...中的數據源VD

產品A是相同產品1 ProductB與Product2相同 我需要來自這兩個不同來源的ProductA/1,ProductB/2 ..的匹配數據 如果他們在兩個來源中都有相同的產品名稱,我可以按產品名稱進行分組,但它們有不同的產品名。

查詢1:

SELECT CD.Description,Count(DISTINCT CD.TweetId) AS MatchingCount 
FROM Result_Table_CSData CD 
     INNER JOIN Result_Table_VData VD 
       ON CD.TweetId = VD.TweetID 
        AND CD.Description = 'Product1' 
        AND VD.Description = 'ProductA' 

查詢2:

SELECT CD.Description,Count(DISTINCT CD.TweetId) AS MatchingCount 
FROM Result_Table_CData CD 
     INNER JOIN Result_Table_VData VD 
       ON CD.TweetId = VD.TweetID 
        AND CD.Description = 'Product2' 
        AND VD.Description = 'ProductB' 

我的產品在兩個表的說明欄100 ......請提出一個方法,這樣我可以運行一個查詢插入每個產品的一個查詢。

+0

會是怎樣的單個查詢所需的輸出?你將如何從你的應用程序傳遞多個參數? –

+0

編輯我的問題,希望現在有意義。 –

+0

它是一個即席查詢還是存儲過程?哪個版本的SQL Server? – dean

回答

0

您想創建一個查詢,允許您將Product1與ProductA鏈接,但正如您所說的那樣,沒有此類鏈接。我不知道這有多可行,但似乎您將不得不通過創建一個包含來自源CD的產品名稱/ ID和來自源VD的相應產品名稱/ ID的表來創建該鏈接。

CDDesc VDDesc 
--------- -------- 
Product1 ProductA 
Product2 ProductB 

查詢將被

SELECT CD.Description,Count(DISTINCT CD.TweetId) AS MatchingCount 
FROM Result_Table_CSData CD 
INNER JOIN SourceLink SL ON (CD.Description = SL.CDDesc) 
INNER JOIN Result_Table_VData VD 
      ON CD.TweetId = VD.TweetID 
      AND (SL.VDDesc = VD.Description) 
0
SELECT CD.Description,(Count(DISTINCT CD.TweetId) + Count(DISTINCT VD.TweetId)) AS MatchingCount 
FROM Result_Table_CSData CD 
     INNER JOIN Result_Table_VData VD 
       ON CD.TweetId = VD.TweetID 
AND charindex(REPLACE(VD.Description,'PRODUCT',''),'ABCDEFGHIJKLMNOPQRSTUVWXYZ')=CAST(REPLACE(CD.Description,'PRODUCT','') AS INT) GROUP BY CD.Description,VD.Description 
+0

還沒有嘗試查詢,但想法是這隻...享受 –