一个简单的问题,是否可以从视图中选择一个组? 场景:我有一个视图,它给我生成,nº,生物量,平均重量和日期。我想分组这个选择
select * from View where date => my_date and date <= my_date
我尝试过像
这样的东西 select generation, nº, biomass, av.weight from select * from View where date => my_date and date <= my_date group by generation
但它似乎不起作用......:/
当然我可以进行查询,然后处理Java代码上的结果,但如果能直接从SQL中检索我想要的内容会更好。
提前致谢。
问候。
编辑:由于我的问题有点令人困惑,我会尝试重新制定它。我创建了一个视图: SELECT TOP (100) PERCENT dbo.Generacion.descgeneracion, SUM(dbo.MovimientosEstanque.numeroindividuos) AS numeroindividuos,
SUM(dbo.MovimientosEstanque.pesomedio * dbo.MovimientosEstanque.numeroindividuos / 1000) AS biomasa,
SUM(dbo.MovimientosEstanque.pesomedio * dbo.MovimientosEstanque.numeroindividuos / 1000) * 1000 / SUM(dbo.MovimientosEstanque.numeroindividuos) AS pesomedio, dbo.MovimientosEstanque.fechamovimiento AS fecha, dbo.LoteDePlanta.codigoplanta FROM dbo.MovimientosEstanque INNER JOIN
dbo.CicloProductivo ON dbo.CicloProductivo.codigociclo = dbo.MovimientosEstanque.codigocicloorigen INNER JOIN
dbo.LoteDePlanta ON dbo.CicloProductivo.idloteplanta = dbo.LoteDePlanta.idloteplanta INNER JOIN dbo.Generacion ON dbo.Generacion.idgeneracion = dbo.LoteDePlanta.idgeneracion WHERE (dbo.MovimientosEstanque.idtipomovimiento = 'SAL') GROUP BY dbo.Generacion.descgeneracion, dbo.MovimientosEstanque.fechamovimiento, dbo.LoteDePlanta.codigoplanta ORDER BY dbo.Generacion.descgeneracion
现在,用户将输入一系列日期(例如20140707和20140709),我必须显示那些日子按代数分组的“numeroindividuos”,“biomasa”和“pesomedio”。例如,当我执行时:
select descgeneracion, numeroindividuos, biomasa, pesomedio, fecha from VistaDespesquesGeneraciones where fecha >= '20140707' and fecha <= '20140710'
我明白了:
descgeneracion numeroindividuos biomasa pesomedio fecha
14 4 76189 892422 11713,2656945228 2014-07-07 00:00:00.000
14 4 39410 80172079 2034308,01826947 2014-07-08 00:00:00.000
14 4 1410 115476 81897,8723404255 2014-07-10 00:00:00.000
现在我想按代将这些结果分组,这样我就可以得到像
这样的东西descgeneration numeroindividuos biomasa pesomedio
14 4 SUM(numeroindividuos) SUM(biomasa) SUM(pesomedio)
我试过
select descgeneracion, sum(numeroindividuos), sum(biomasa), sum(pesomedio) from select * from VistaDespesquesGeneraciones where fecha >= '20140707' and fecha <= '20140709' group by descgeneracion
和
select descgeneracion, sum(numeroindividuos), sum(biomasa), sum(pesomedio) from [select * from VistaDespesquesGeneraciones where fecha >= '20140707' and fecha <= '20140709'] group by descgeneracion
他们都没有工作,sintax错误第一种情况和对象名称在第二种情况下无效。
对不起有误。
答案 0 :(得分:0)
下次尝试发布您获得的错误,通常会有帮助。
避免使用select *
帮助了解架构。
由于我不知道这些领域,我将不得不承担。
select generation, COUNT(*) [nº], SUM(weight) [biomass], AVG(weight) [av.weight] from (select * from View where date => my_date and date <= my_date) t group by generation
使用group by,group by子句中未包含的其他字段必须受某种Aggregate Functions
的影响答案 1 :(得分:0)
您是否尝试将子查询放在括号中的视图上。这样它将被视为自己的表。作为使用上述代码的示例;
select a.generation, count(*) as [nº], a.biomass, a.weight from (select generation, <uniquekey>, biomass, weight from View where date => my_date and date <= my_date) a group by a.generation, a.biomass, a.weight
或者在不使用子查询的情况下执行此操作(这可能会返回稍快的结果)
select generation, count(*) as [nº], biomass, weight from View where date => my_date and date <= my_date group by generation, biomass, weight
虽然需要包括计数,最大值,最小值计算的任何值,因此您需要决定如何计算重量和生物量(最小值,最大值,平均值)。以mxix的答案为例。
编辑:与上面的新示例代码相同的理论。
select a.descgeneracion, sum(a.numeroindividuos), sum(a.biomasa), sum(a.pesomedio) from (select descgeneracion, numeroindividuos, biomasa, pesomedio from VistaDespesquesGeneraciones where fecha >= '20140707' and fecha <= '20140709') a group by a.descgeneracion