Cross s'appliquent sans fonction
-
30-10-2019 - |
Question
Je voudrais exécuter une requête très similaire à celle-ci sur l'une de mes bases de données de production:
-- 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
Mais je n'ai pas le droit de créer une fonction définie par l'utilisateur sur cette base de données (je suis un développeur).
Existe-t-il un moyen d'accomplir cette requête sans l'utilisation d'une fonction définie par l'utilisateur (ou toute autre instruction "Créer")?
Remarque: J'ai essayé de faire une croix avec le contenu de ma fonction, mais il a échoué (je ne pense pas que les expressions multi-statement soient autorisées dans la croix s'appliquer).
Pas de solution correcte
Licencié sous: CC-BY-SA avec attribution
Non affilié à dba.stackexchange