Benötigen Sie Hilfe hier. Überprüfen Sie die letzte GROUP BY-Klausel.Gruppierung nach Unterabfragen
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<[email protected] --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
[email protected]
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 [email protected] --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 @[email protected]+1
End
Select distinct * from #ProcesadosBrutos order by Cod_cliente
Im den folgenden Fehler erhalten: Kann nicht ein Aggregat oder eine Unterabfrage in einem Ausdruck für die Gruppe durch Liste einer GROUP BY-Klausel verwenden.
Ich muss nach den Ergebnissen der Unterabfrage gruppieren "(SELECT count (*) FROM # Temp2 TMP2 WO ST2.nro_viaje = TMP2.nro_viaje GROUP BY nro_viaje)".
Irgendwelche Vorschläge? Vielen Dank.
Sie könnten versuchen, GROUP BY auf dem Alias 'cantidad' zu verwenden oder wenn das nicht funktioniert, müssen Sie eine Unterabfrage für Ihre aktuelle Hauptabfrage verwenden und dann die letzte Gruppe anwenden (dann wieder gegen die neue alias) –
yup ich habe versucht, nach dem Alias gruppieren. werde deinen Vorschlag ausprobieren –