有没有办法写
SELECT count(*) from tablename where (multiple_ids_here) in (SELECT id from tablename)
通常,我会写:
select count(*) from tablename
where id_1 in (SELECT id from tablename)
OR id_2 in (SELECT id from tablename)
id_3 in (SELECT id from tablename)
如果我们有多个值,效率非常低。
任何?
编辑:问题已更新。如果我想选择计数怎么办?
答案 0 :(得分:2)
您的三个in
版本可能是最有效的方法。如果您想要进行比较,可以使用exists
:
select . . .
from t t1
where exists (select 1
from tablename t2
where t2.id in (t1.id_1, t1.id_2, t1.id_3)
);
我还应该注意,在这样的多列中存储id通常是数据模型问题的标志。您可能想要一个每个id有一行的表,而不是每个id一列。这种格式也可以简化这种类型的查询。
答案 1 :(得分:0)
我不确定我是否理解您的问题,您可以举例说明您正在使用的数据以及即将发布的数据。
根据我的理解,你可以使用这样的cte。
;WITH Sales_CTE ([counts],CustomerID, SalespersonPersonID,PickedByPersonID)
AS
(
select count(*),CustomerID,SalespersonPersonID ,PickedByPersonID
from [WideWorldImporters].[Sales].[Orders]
group by CustomerID,SalespersonPersonID,PickedByPersonID
)
SELECT sum([counts])
FROM Sales_CTE
GO
它会给你一个像这样的结果。你必须改变周围的列。
答案 2 :(得分:0)
有关获取count(*)
的最新问题...使用cross apply()
与values()
合并common table expression中的数据:
;with cte as (
select t.Id, v.RelatedId
from t
cross apply (values (id_1),(id_2),(id_3)) v(RelatedId)
)
select
cte.Id
, RelationCount = count(*)
from cte
inner join RelatedTable r
on cte.RelatedId = r.Id
group by cte.Id