SQL:与两个表相关的计数问题

时间:2010-10-14 19:23:30

标签: sql sql-server sql-server-2008

我有一个包含列的表:Sku,Count

在另一个表中有sku有不同的图像,所以在这个表中,一个sku重复多次,有多个文件扩展名,我需要做的是计算sku在第二个表中的图像数量然后使用该编号更新第一个表中的count列。我非常感谢任何帮助。

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

2 个答案:

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

输出:

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

(3 row(s) affected)

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

答案 1 :(得分:0)

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