Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/74.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
SQL中的GroupBy和SelectMany类似物?_Sql_Tsql - Fatal编程技术网

SQL中的GroupBy和SelectMany类似物?

SQL中的GroupBy和SelectMany类似物?,sql,tsql,Sql,Tsql,在C#中,我可以对集合项进行分组,为每个组运行子查询,然后返回行 var rows = collection.GroupBy( item => item.Property).SelectMany( g => ...); 在SelectMany中,零件查询可以针对集合(由于关闭)或/和分组项目运行。然后组合子查询的结果 我的问题是,我不知道如何使用SQL查询实现同样的功能。 放置在select中的子查询可以参数化,但最多允许返回一行,并且联接不排除不属于该组的项。 我没有面向sql的

在C#中,我可以对集合项进行分组,为每个组运行子查询,然后返回行

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,把它写下来作为答案,我会接受的。谢谢