计算SQL Server 2012中的记录

时间:2019-03-31 11:53:27

标签: sql-server-2012 subquery

在我的表中,我想找出productid是否存在于表中。 实际上,文本代码在where条件中作为参数传递。

create table productdetails(productid nvarchar(22),textcode varchar(50),textmessage varchar(50))

INSERT INTO  productdetails VALUES('T0001','M0001','ONE')
INSERT INTO  productdetails VALUES('T0001','M0002','TWO')
INSERT INTO  productdetails VALUES('T0009','M0006','THREE')
INSERT INTO productdetails  VALUES('T0002','M0001','FIVE')

如果我给textcode ='M0001'的条件是给了productid ='T0001'和'T0002',我想检查这个productid'T0001'和'T0002'是否在表中再存在一次。

我在下面使用查询。它是优化查询还是其他方法来检查这种情况。

SELECT COUNT(PRODUCTID),PRODUCTID FROM productdetails WHERE productid in(SELECT PRODUCTID FROM productdetails WHERE TEXTCODE='M0001') 
GROUP BY PRODUCTID HAVING COUNT(*)>1

1 个答案:

答案 0 :(得分:1)

您可以在having子句中使用条件聚合来简化查询:

SELECT COUNT(*), PRODUCTID 
FROM productdetails 
GROUP BY PRODUCTID 
HAVING COUNT(CASE WHEN TEXTCODE='M0001' THEN 1 END) > 0
AND COUNT(*) > 1

此查询应该为您提供更好的性能,因为您只访问一次表。

请注意,为获得最佳性能,两个查询都可能会受益于相同的索引-TextCode和ProductId的索引(按此顺序!)应有助于两个查询的性能。