Cross si applica senza una funzione
-
30-10-2019 - |
Domanda
Vorrei eseguire una query molto simile a questa in uno dei miei database di produzione:
-- 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
Ma non ho i diritti di creare una funzione definita dall'utente su quel database (sono uno sviluppatore).
C'è un modo per eseguire questa query senza l'uso di una funzione definita dall'utente (o qualsiasi altra affermazione "create")?
NOTA: ho provato a fare una croce con il contenuto della mia funzione, ma non è riuscito (non credo che siano consentite espressioni a piùestrizioni nell'applicazione della croce).
Nessuna soluzione corretta
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a dba.stackexchange