当前位置:首页 > 数据库 > Sql Server

急求一条SQL语句解决思路

优良自学吧提供急求一条SQL语句解决思路,急求一条SQL语句本帖最后由 xiaojie_cp 于 2015-04-24 18:02:50 编辑 有如下查询结果 从这里面查询每个产品(ProductID)具有某个(或同时具有某几个)属性(即AttID)的产品数量,并按ClassID分组 如果只

急求一条SQL语句
本帖最后由 xiaojie_cp 于 2015-04-24 18:02:50 编辑
有如下查询结果
急求一条SQL语句解决思路
从这里面查询每个产品(ProductID)具有某个(或同时具有某几个)属性(即AttID)的产品数量,并按ClassID分组
如果只查询某个产品具有单个属性的话,可以用如下SQL,如下面查询具有AttID为1的所有产品:
SELECT classid,COUNT(ProductID) AS 数量 FROM View_mf_ProductList WHERE (AttID = 1) GROUP BY ClassID

classid                   数量
------------                ----------------
13                           2
14                           1

如果查询的产品同时具有多个属性,比如同时具有AttID为1并且AttID为2时,上面的SQL就会出问题。
下面是正确的查询结果,请问怎样写SQL能得到下面的结果集呢?
classid                   数量
------------                ----------------
13                           1
14                           0


------解决思路----------------------
你错了,13的数量还是2

如果要显示出14数量0的话,有两种比较麻烦的
--方法1
SELECT T1.classid,ISNULL(T2.数量,0)数量
FROM(
SELECT ClassID FROM View_mf_ProductList GROUP BY classid
)T1 LEFT JOIN(
SELECT
ClassID,COUNT(DISTINCT ProductID)AS 数量
FROM
View_mf_ProductList
WHERE AttID IN(1,2)
GROUP BY ALL ClassID
HAVING COUNT(DISTINCT ProductID)=2
)T2 ON T1.ClassID=T2.ClassID
--方法2
SELECT
ClassID,COUNT(DISTINCT ProductID)AS 数量
FROM
View_mf_ProductList T1
WHERE EXISTS(SELECT 1 FROM View_mf_ProductList T2
 WHERE T1.ProductID=T2.ProductID AND T2.AttID=1)
AND EXISTS(SELECT 1 FROM View_mf_ProductList T2
 WHERE T1.ProductID=T2.ProductID AND T2.AttID=2)
GROUP BY ALL ClassID
如果不要显示14数量为0的话,方法一可以简写了
--方法1
SELECT
ClassID,COUNT(DISTINCT ProductID)AS 数量
FROM
View_mf_ProductList
WHERE AttID IN(1,2)
GROUP BY ALL ClassID
HAVING COUNT(DISTINCT ProductID)=2
--方法2
SELECT
ClassID,COUNT(DISTINCT ProductID)AS 数量
FROM
View_mf_ProductList T1
WHERE EXISTS(SELECT 1 FROM View_mf_ProductList T2
 WHERE T1.ProductID=T2.ProductID AND T2.AttID=1)
AND EXISTS(SELECT 1 FROM View_mf_ProductList T2
 WHERE T1.ProductID=T2.ProductID AND T2.AttID=2)
GROUP BY ClassID

(本文来自互联网,不代表搜站(http://www.ylzx8.cn/)的观点和立场)
本站所有内容来自互联网,若本站收录的信息无意侵犯了贵司版权,请给我们来信(ylzx8cn@163.com),我们会及时处理和回复,谢谢