MSSQL查询优化

时间:2015-08-03 10:12:09

标签: sql-server

MSSQL,我需要为查询传递一组参数...有什么方法可以一次性完成!

我有2个数据源CD和VD。 我有产品数据:产品A,B,C ......在数据源CD中 我有产品数据:产品1,2,3 ...在数据源VD

ProductA与Product1相同 ProductB与Product2相同 我需要来自这2个不同来源的ProductA / 1,ProductB / 2 ..的匹配数据 如果他们在两个来源中都有相同的产品名称,我可以按产品名称分组,但他们有不同的产品名称。

查询1:

<div id="container">
  <div id="intro">
    Intro
  </div>
  <div class="content-page-1">
    Lorem ipsum dolor sit amet, consectetur adipisicing elit. Tempore temporibus ex magni nesciunt quasi illo sit aliquam unde! Molestias iusto perferendis nulla voluptatum illo non numquam impedit consequuntur sunt a!
  </div>
  <div class="content-page-2">
    Lorem ipsum dolor sit amet, consectetur adipisicing elit. Tempore temporibus ex magni nesciunt quasi illo sit aliquam unde! Molestias iusto perferendis nulla voluptatum illo non numquam impedit consequuntur sunt a!
  </div>
</div>

查询2:

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'

我在两个表的描述列中都有100个产品...请建议一种方法,以便我可以运行单个查询,为每个产品运行一个查询。

3 个答案:

答案 0 :(得分: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)

答案 1 :(得分: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

答案 2 :(得分:0)

尝试这样的事情

 SELECT 
  CD.Description
,Count(CD.TweetId) Over (Partition CD.Description ,VD.Description ,  CD.TweetId)  AS MatchingCount
FROM   Result_Table_CSData CD
cross apply (select VD.Description from Result_Table_VData VD where CD.TweetId = VD.TweetID AND VD.Description in ('ProductA','ProductB') ) VD
where CD.Description in ('Product1','Product2')

这应该为您提供所需的东西!