ここではヘルプが必要です。最後の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<[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は、次のエラーを取得:集計またはGROUP BY句のリストでグループのために使用される式でサブクエリを使用することはできません。
サブクエリ "(SELECT count(*)FROM#Temp2 TMP2 WHERE ST2.nro_viaje = TMP2.nro_viaje GROUP BY nro_viaje)"の結果でグループ化する必要があります。
提案がありますか?ありがとう。
エイリアス 'cantidad'でGROUP BYを試しても問題が解決しない場合は、現在のメインクエリのサブクエリを使用してから最後のグループを適用する必要がありますエイリアス) –
ええ、別名でグループ化しようとしました。あなたの提案を試してみてください –