急求一条SQL语句

lovebaby 2015-04-24 06:00:33
有如下查询结果

从这里面查询每个产品(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

...全文
141 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
一头大葱 2015-07-08
  • 打赏
  • 举报
回复
分组子集的运算,数据量不大时读出来处理要简单些,用集算器只要一句:
A1	$select distinct ClassID,ProductID,AttID from tb where AttID in(1,2)
A2	=A1.group(ClassID;~.group(ProductID).count(~.len()==2):数量)
很好理解,也可以嵌入应用程序中。
lovebaby 2015-04-24
  • 打赏
  • 举报
回复
确实写错了,我试一下SQL,非常感谢!
还在加载中灬 2015-04-24
  • 打赏
  • 举报
回复
你错了,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
lovebaby 2015-04-24
  • 打赏
  • 举报
回复
试过了,不行的。这样什么都查不出来
shoppo0505 2015-04-24
  • 打赏
  • 举报
回复
(AttID = 1) 改为(AttID = 1 and AttID = 2)

22,210

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 疑难问题
社区管理员
  • 疑难问题社区
  • 尘觉
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧