2010-10-14 41 views
2

我有列的表计数的问题:SKU,计数SQL:与两个表

另一个表中有SKU与不同的图像,所以在此表中一个SKU重复几次与多个文件扩展名

,我需要做的是算一个SKU在第二个表图像的数量,然后在该号码的第一个表更新计数列。我将不胜感激任何帮助。

UPDATE 
    MediaResource  
SET 
    [mrCount] = 
(
SELECT 
Count(PartNumber) 
)....I don't know how to handle this 

回答

2

尝试这样的:

DECLARE @MediaResurce  table (sku varchar(3), CountOf int) 
DECLARE @MediaResurce_Pics table (sku varchar(3), ImageName varchar(10)) 

INSERT @MediaResurce VALUES ('abc',0) 
INSERT @MediaResurce VALUES ('mno',0) 
INSERT @MediaResurce VALUES ('xyz',0) 

INSERT @MediaResurce_Pics VALUES ('abc','a.jpg') 
INSERT @MediaResurce_Pics VALUES ('abc','a.gif') 
INSERT @MediaResurce_Pics VALUES ('xyz','a.gif') 

UPDATE a 
    SET CountOf=dt.CountOf 
    FROM @MediaResurce a 
     INNER JOIN (SELECT 
         aa.Sku,ISNULL(COUNT(bb.sku),0) AS CountOf 
         FROM @MediaResurce      aa 
          LEFT OUTER JOIN @MediaResurce_Pics bb ON aa.sku=bb.sku 
         GROUP BY aa.Sku 
        ) dt ON a.sku=dt.sku 

SELECT * FROM @MediaResurce 

OUTPUT:

sku CountOf 
---- ----------- 
abc 2 
mno 0 
xyz 1 

(3 row(s) affected) 

注:
如果您只需要您的等效@MediaResurce表的@MediaResurce_Pics的计数表,那么我会强烈考虑用视图替换等效的@MediaResurce表。它将自动保持同步而不需要触发器。如果实际需要其他列的等效@MediaResurce表,仍然考虑Count列的视图。如果您在选择期间需要额外的速度,您可以实现该列。

+0

表示什么? – wil 2010-10-14 19:33:49

+0

“a”仅仅是一个表别名:在我的示例代码中,@MediaResurce的FROM @MediaResurce a'。 – 2010-10-14 19:40:28

+0

所以a是媒体资源,dt是媒体资源图片? – wil 2010-10-14 19:46:33

0
Update MediaResource 
Set mrCount = (
       Select Count(*) 
       From TheOtherTable As T2 
       Where T2.SKU = MediaResource.SKU 
       ) 
+0

0行受到影响,hmm – wil 2010-10-14 19:38:30

+0

@wil - 影响零行的唯一方法是MediaResource中没有行(假设您使用类似的查询以上没有where子句)。 – Thomas 2010-10-14 20:02:48