簡體   English   中英

SQL:如何將其轉換為一個查詢?

[英]SQL: How could I turn this into one query?

UPDATE a
    SET CountOfAA=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
                        WHERE somecol = 0
                        GROUP BY aa.Sku
                   ) dt ON a.sku=dt.sku

/////////////

UPDATE a
    SET CountOfBB=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
                         WHERE somecol = 1
                        GROUP BY aa.Sku
                   ) dt ON a.sku=dt.sku

這應該是您要尋找的:

UPDATE a
SET 
  CountOfAA = dt.CountOfAA,
  CountOfBB = dt.CountOfBB
FROM @MediaResurce  a
INNER JOIN (
  SELECT
    SUM(
      case somecol 
        when 0 then 1
        else 0
      end
    ) AS CountOfAA,
    SUM(
      case somecol 
        when 1 then 1
        else 0
      end
    ) AS CountOfBB
    FROM @MediaResurce aa
    LEFT OUTER JOIN @MediaResurce_Pics bb 
      ON aa.sku=bb.sku
) dt ON a.sku=dt.sku

您可以根據您的“ somecol”的要求將SUM“ 1”或“ 0”求和,而不用對兩個單獨的查詢進行計數。

好吧,你可以輕松地做到這一點

UPDATE a
SET CountOfAA=dt.CountOf,
    CountOfBB=dt2.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
                    WHERE somecol = 0
                    GROUP BY aa.Sku
               ) dt ON a.sku=dt.sku
    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
                     WHERE somecol = 1
                    GROUP BY aa.Sku
               ) dt2 ON a.sku=dt2.sku

這是一種懶惰且無效的方法,另一種方法可能是這樣的:

SUM(somecol) AS 'count where somecol=1'
count(*) - SUM(somecol) AS 'count where somecol=0'
...
where somecol in (0,1) //only need if somecol can be something other than 0 or 1!

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM