Comment dois-je appeler une Fonction Définie par l'Utilisateur pour une utilisation avec, group by, order by?
J'ai Table1 et j'ai besoin d'obtenir qu'il ressemble à la Table2:
Table1
VisitingCount | Date
-----------------------
1 | 15:09
3 | 15:10
7 | 15:15
1 | 15:39
2 | 15:40
3 | 15:47
Table2
VisitingCount | Date
-----------------------------
11 | 15:00-15:30
6 | 15:30-16:00
J'ai écrit un sql fonctions définies par l'utilisateur comme ceci:
create FUNCTION [dbo].[fn_GetActivityLogsArranger] (@time AS nvarchar(max))
RETURNS nvarchar(max)
AS
BEGIN
declare @Return varchar(30)
select @Return =
case
when @time between '15:00' and '15:30' then '15:00-15:30'
when @time between '15:30' and '16:00' then '15:30-16:00'
when @time between '16:00' and '16:30' then '16:00-16:30'
when @time between '16:00' and '16:30' then '16:00-16:30'
when @time between '16:30' and '17:00' then '16:30-17:00'
when @time between '17:00' and '17:30' then '17:00-17:30'
when @time between '17:30' and '18:00' then '17:30-18:00'
else 'Unknown'
end
return @Return
end
Lors de l'appel de l'UDF dans ma requête sql, je obtenir le résultat correct:
select
Count(Page) as VisitingCount,
dbo.fn_GetActivityLogsArranger(CONVERT(VARCHAR(5),Date, 108))
as [Time]
from
scr_SecuristLog
where
Date between '2009-04-30' and '2009-05-02' AND
[user] in
(
select USERNAME
from scr_CustomerAuthorities
where customerID = Convert(varchar,4) and ID = Convert(varchar,43)
)
group by
dbo.fn_GetActivityLogsArranger(CONVERT(VARCHAR(5),Date, 108))
order by
dbo.fn_GetActivityLogsArranger(CONVERT(VARCHAR(5),Date, 108)) asc
Mais je n'aime pas cette méthode; Mon rêve code devrait ressembler à ceci:
select
Count(Page) as VisitingCount,
dbo.fn_GetActivityLogsArranger(CONVERT(VARCHAR(5),Date, 108))
as [TIME]
from
scr_SecuristLog
where
Date between '2009-04-30' and '2009-05-02' and
user] in
(
select USERNAME
from scr_CustomerAuthorities
where customerID = Convert(varchar,4) and ID = Convert(varchar,43)
)
group by [TIME]
order by [TIME] asc
OriginalL'auteur Penguen | 2009-05-06
Vous devez vous connecter pour publier un commentaire.
Vous pouvez vous joindre à votre table comme un point de vue et ont votre appel de fonction. De cette façon, vous pouvez appeler le group by et order by sur la colonne de la vue.
Vous êtes ok. Mais je ne comprends pas"......) scr_SecuristLog2..." Comment utiliser cette méthode
la sous-requête dans l' "(" ")" entre parenthèses renvoie toutes les données que vous utilisez dans SecuristLog avec l'appel à la fonction de retour le Temps. le nom scr_SecuristLog2 est juste un alias pour laquelle d'appeler cela une "vue". Ce point de vue elle-même peut alors être utilisé comme une table standard et, par conséquent, vous pouvez simplement appeler la colonne calculée par nom.
je ne comprends pas bien. Pouvez-vous me donner des exemples de sites web?
stackoverflow.com/questions/829354/t-sql-what-is-an-inline-view
OriginalL'auteur Robin Day