Mi è stato detto che l'errore è dovuto al fatto che nella seconda query utilizzo DataLogin senza operatori di raggruppamento, e questo non è concesso, a meno di non riportare DataLogin nella clausola "GROUP BY" (cosa che, però, andrebbe contro la semantica dell'interrogazione).
Mi hanno fornito una soluzione alternativa, la seguente:
SELECT UserId,count(distinct DataLogin) AS Conteggio,
CASE
WHEN count(distinct DataLogin) > 48 THEN '5.Super'
WHEN count(distinct DataLogin) > 12
AND count(distinct DataLogin) <= 48
AND (((select DataLogin from TabellaLogin where DataLogin BETWEEN '01/01/2006' AND '01/04/2006') BETWEEN DATEADD(day, -15, @DataInizio) AND @DataInizio ) AND ( count(distinct DataLogin) > 2 ) )
AND (((select DataLogin from TabellaLogin where DataLogin BETWEEN '01/01/2006' AND '01/04/2006') BETWEEN DATEADD(day, -30, @DataInizio) AND DATEADD(day, -15, @DataInizio)) AND (count(distinct DataLogin) > 2))
AND (((select DataLogin from TabellaLogin where DataLogin BETWEEN '01/01/2006' AND '01/04/2006') BETWEEN DATEADD(day, -45, @DataInizio) AND DATEADD(day, -30, @DataInizio)) AND (count(distinct DataLogin) > 2))
THEN '4.Normal'
ELSE '3.Occasionale'
END AS Tipo
FROM TabellaLogin
WHERE DataLogin BETWEEN '01/01/2006' AND '01/04/2006'
GROUP BY UserId
La quale, però, mi dà il seguente errore:
Subquery returned more than 1 value. This is not permitted when the subquery follows =, !=, <, <= , >, >= or when the subquery is used as an expression
Penso sia dovuto al fatto che stiamo dicendo
CASE WHEN SELECT DataLogin
che non gli piace molto... a logica, direi che si dovrebbe trasformare in qualcosa tipo
CASE WHEN ... AND count(((select DataLogin from TabellaLogin where DataLogin BETWEEN '01/01/2006' AND '01/04/2006') BETWEEN DATEADD(day, -15, @DataInizio) AND @DataInizio )) > 2 ]
Qualcuno avrebbe qualche idea di come poter rendere questa cosa in modo da utilizzare questa metodologia?
Grazie ancora per l'attenzione