[英]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.