SQL: проблема подсчета, связанная с двумя таблицами - PullRequest
2 голосов
/ 14 октября 2010

У меня есть таблица с колонками: Sku, Count

в другой таблице есть sku с разными изображениями, поэтому в этой таблице один sku повторяется несколько раз с несколькими расширениями файлов, что мне нужно сделать, это подсчитать количество изображений, которые sku имеет во второй таблице, а затем обновить столбец подсчета в первой таблице с этим номером. Буду очень признателен за любую помощь.

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

Ответы [ 2 ]

2 голосов
/ 14 октября 2010

попробуйте что-то вроде этого:

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. Вы можете материализовать столбец, если вам нужна дополнительная скорость во время выбора.

0 голосов
/ 14 октября 2010
Update MediaResource
Set mrCount =   (
                Select Count(*)
                From TheOtherTable As T2
                Where T2.SKU = MediaResource.SKU
                )
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...