Aplicar cruzado sin función
-
30-10-2019 - |
Pregunta
Me gustaría ejecutar una consulta muy similar a esta en una de mis bases de datos de producción:
-- Setup the table (Already there in my real scenario)
create table dbo.MyTable(MyValue int, MyGroup varchar(5))
insert into dbo.MyTable values
(56,'I'), (12,'I'), (56, 'II'), (12, 'II'), (56, 'III'), (56, 'IV'), (56, 'V'), (12, 'V')
-- Create a function to cross apply with (I can't make this in my production env)
create function dbo.GetOrderGroup(@groupName varchar(15))
returns @ReturnTable table(GroupValue varchar(8000), GroupName varchar(15))
as
begin
DECLARE @groupValue VARCHAR(8000)
SELECT @groupValue = COALESCE(@groupValue + ', '
+ cast(MyValue as VARCHAR(10)), cast(MyValue as VARCHAR(10)))
FROM MyTable
where MyGroup = @groupName
insert into @ReturnTable(GroupValue, GroupName)
SELECT @groupValue, @groupName
return;
end;
go
-- cross apply and get the distinct values
SELECT grp.GroupValue, count(distinct (grp.GroupValue + grp.GroupName)) as 'Count'
from MyTable tbl (NOLOCK)
cross apply dbo.GetOrderGroup(tbl.MyGroup) grp
GROUP BY grp.GroupValue
Pero no tengo derechos para crear una función definida por el usuario en esa base de datos (soy un desarrollador).
¿Hay alguna forma de lograr esta consulta sin el uso de una función definida por el usuario? (o cualquier otra declaración de "crear")?
NOTA: Intenté hacer una cruzada cruzada con el contenido de mi función, pero falló (no creo que las expresiones de estados múltiples estén permitidos en la aplicación cruzada).
No hay solución correcta
Licenciado bajo: CC-BY-SA con atribución
No afiliado a dba.stackexchange