按子查询分组

时间:2016-04-29 14:54:07

标签: sql-server group-by subquery

需要一些帮助。检查最后一个GROUP BY子句。

set nocount on
--Creo variable de tabla sin duplicados
Declare @Temp1 Table (nro_viaje nvarchar(255),cod_cliente nvarchar(255))
if object_id('tempdb..#Temp2') is not null
Begin
 drop table #Temp2
End
if object_id('tempdb..#ProcesadosBrutos') is not null
Begin
 drop table #ProcesadosBrutos
End


insert into @Temp1 (nro_viaje,cod_cliente)
select distinct [nro_viaje],cod_cliente FROM [Test].[dbo].[Hoja1$] order by nro_viaje
--Remuevo los viajes que fueron de un solo cliente
Delete T
From @Temp1 T
JOIN (select nro_viaje, count(*) cant from @Temp1 group by nro_viaje having COUNT(*)=1) S on T.nro_viaje=S.nro_viaje
--Numero los viajes para iterar

select cod_cliente,nro_viaje, dense_rank()over ( order by nro_viaje) as ViajeID into #Temp2 from @Temp1  

--Obtengo el menor viaje para comenzar a iterar
Declare @ViajeID int
Declare @ViajeIDMax int
Select @ViajeID=Min(ViajeID) From #Temp2
Select @ViajeIDMax=MAX(ViajeID) From #Temp2

Create Table #ProcesadosBrutos (Cod_cliente nvarchar(255), Combinables nvarchar(4000), Cantidad nvarchar (255))

While @ViajeID<=@ViajeIDMax --Itero por cada viaje
Begin

Insert into #ProcesadosBrutos (Cod_cliente,Combinables, Cantidad)
SELECT DISTINCT ST2.cod_cliente ,
    SUBSTRING(
        (
            SELECT '-'+CONVERT(varchar,ST1.cod_cliente)  AS [text()]
            FROM #Temp2 ST1
            WHERE
                ST1.ViajeID=@ViajeID 
                  and   ST1.viajeid = ST2.viajeid
            and ST1.cod_cliente <> ST2.cod_cliente
            ORDER BY ST1.cod_cliente
            FOR XML PATH ('')
        ), 2, 1000) COMBINABLES,
        (SELECT count(*) FROM #Temp2 TMP2 WHERE ST2.nro_viaje = TMP2.nro_viaje GROUP BY nro_viaje) Cantidad
 FROM #Temp2 ST2 
where ViajeID=@ViajeID --AND (SELECT count(*) FROM #Temp2 TMP2 WHERE ST2.nro_viaje = TMP2.nro_viaje GROUP BY nro_viaje) > 1 AND (SELECT count(*) FROM #Temp2 TMP2 WHERE ST2.nro_viaje = TMP2.nro_viaje GROUP BY nro_viaje) < 4
group by (SELECT count(*) FROM #Temp2 TMP2 WHERE ST2.nro_viaje = TMP2.nro_viaje GROUP BY nro_viaje)
ORDER BY ST2.cod_cliente
--Aumento en 1 el viajeid para proxima iteracion
      Set @ViajeID=@ViajeID+1
End


Select distinct * from #ProcesadosBrutos order by Cod_cliente

我收到以下错误:无法在GROUP BY子句列表中使用的表达式中使用聚合或子查询。

我需要按子查询给出的结果进行分组“(SELECT count(*)FROM#Temp2 TMP2 WHERE ST2.nro_viaje = TMP2.nro_viaje GROUP BY nro_viaje)”。

有什么建议吗?感谢。

1 个答案:

答案 0 :(得分:0)

您是否尝试使用别名进行GROUP BY?

new JProperty("method",JArray.Parse("[\"password\"]"))