SQL中的GroupBy和SelectMany类似物?
在C#中,我可以对集合项进行分组,为每个组运行子查询,然后返回行SQL中的GroupBy和SelectMany类似物?,sql,tsql,Sql,Tsql,在C#中,我可以对集合项进行分组,为每个组运行子查询,然后返回行 var rows = collection.GroupBy( item => item.Property).SelectMany( g => ...); 在SelectMany中,零件查询可以针对集合(由于关闭)或/和分组项目运行。然后组合子查询的结果 我的问题是,我不知道如何使用SQL查询实现同样的功能。 放置在select中的子查询可以参数化,但最多允许返回一行,并且联接不排除不属于该组的项。 我没有面向sql的
var rows = collection.GroupBy( item => item.Property).SelectMany( g => ...);
在SelectMany
中,零件查询可以针对集合(由于关闭)或/和分组项目运行。然后组合子查询的结果
我的问题是,我不知道如何使用SQL查询实现同样的功能。放置在select中的子查询可以参数化,但最多允许返回一行,并且联接不排除不属于该组的项。
我没有面向sql的思维,如果这真是一个愚蠢的问题,我道歉 时态数据库的示例:
id instance_id data from to
1 1 A 20140301 20140310
2 1 AA 20140311 20140321
3 2 B 20140301 20140305
4 2 BC 20140306 20140316
我需要对每个实例id(即实体的历史数据)运行子查询,并仅为每个实体选择历史的一部分。您可以使用交叉应用这样做:
SELECT *
FROM mytable
CROSS APPLY (
SELECT *
FROM othertable
WHERE instance_id = mytable.instance_id)
如果可能的话,我建议使用连接,但是如果您没有简单的连接条件,APPLY会派上用场。很好地解释了这一点。如果使用EF6,则可以打开日志记录,然后可以看到将在SQL Server conn.Database.Log=Console.writeliney上执行的查询。您应该显示您的架构(表、列、数据类型、主键/FK)和一些示例数据。那么你应该告诉我们你想要达到的目标和期望的结果。@TimSchmelter我添加了这个例子。我想你在寻找@TomT,把它写下来作为答案,我会接受的。谢谢