2010-10-14 56 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