[英]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
This should be what you are looking for: 这应该是您要寻找的:
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
Instead of two separate queries to count each instance, you can SUM "1" or "0" based on the requirements of your "somecol". 您可以根据您的“ somecol”的要求将SUM“ 1”或“ 0”求和,而不用对两个单独的查询进行计数。
Well you can easily do it as 好吧,你可以轻松地做到这一点
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
Which is the lazy and inneficient way, another method might be something like this: 这是一种懒惰且无效的方法,另一种方法可能是这样的:
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.