giorgio rancati
2005-07-25 15:05:13 UTC
Ciao a tutti,
pensavo che la funzione COALESCE con due parametri fosse equivalente a
ISNULL ma non è sempre così.
Provate Questo script
-----
Use TempDb
Go
Create Table Tab1
(Campo1 Varchar(5))
Insert Tab1 Values('A')
Insert Tab1 Values(' A')
Insert Tab1 Values(' A')
Insert Tab1 Values('B')
Insert Tab1 Values(' B')
Insert Tab1 Values(DEFAULT)
Insert Tab1 Values(DEFAULT)
SELECT LTRIM(ISNULL(Campo1, '')) AS A
FROM dbo.Tab1
GROUP BY LTRIM(ISNULL(Campo1, ''))
HAVING LTRIM(ISNULL(Campo1, '')) <> 'B'
SELECT LTRIM(COALESCE(Campo1, '')) AS A
FROM dbo.Tab1
GROUP BY LTRIM(COALESCE(Campo1, ''))
HAVING LTRIM(COALESCE(Campo1, '')) <> 'B'
----
la prima select funziona, la seconda da errore
-----
Server: messaggio 8121, livello 16, stato 1, riga 1
La colonna 'dbo.Tab1.Campo1' non è valida nella clausola HAVING perché non è
inclusa né in una funzione di aggregazione né nella clausola GROUP BY.
----
so bene che in questo caso posso spostare la Having nella Where
----
SELECT LTRIM(COALESCE(Campo1, '')) AS A
FROM dbo.Tab1
WHERE LTRIM(COALESCE(Campo1, '')) <> 'B'
GROUP BY LTRIM(COALESCE(Campo1, ''))
----
ma era solo una curiosità visto che anche Enterprise Manager compone lo
script con la Having e non con la Where.
Ciao
pensavo che la funzione COALESCE con due parametri fosse equivalente a
ISNULL ma non è sempre così.
Provate Questo script
-----
Use TempDb
Go
Create Table Tab1
(Campo1 Varchar(5))
Insert Tab1 Values('A')
Insert Tab1 Values(' A')
Insert Tab1 Values(' A')
Insert Tab1 Values('B')
Insert Tab1 Values(' B')
Insert Tab1 Values(DEFAULT)
Insert Tab1 Values(DEFAULT)
SELECT LTRIM(ISNULL(Campo1, '')) AS A
FROM dbo.Tab1
GROUP BY LTRIM(ISNULL(Campo1, ''))
HAVING LTRIM(ISNULL(Campo1, '')) <> 'B'
SELECT LTRIM(COALESCE(Campo1, '')) AS A
FROM dbo.Tab1
GROUP BY LTRIM(COALESCE(Campo1, ''))
HAVING LTRIM(COALESCE(Campo1, '')) <> 'B'
----
la prima select funziona, la seconda da errore
-----
Server: messaggio 8121, livello 16, stato 1, riga 1
La colonna 'dbo.Tab1.Campo1' non è valida nella clausola HAVING perché non è
inclusa né in una funzione di aggregazione né nella clausola GROUP BY.
----
so bene che in questo caso posso spostare la Having nella Where
----
SELECT LTRIM(COALESCE(Campo1, '')) AS A
FROM dbo.Tab1
WHERE LTRIM(COALESCE(Campo1, '')) <> 'B'
GROUP BY LTRIM(COALESCE(Campo1, ''))
----
ma era solo una curiosità visto che anche Enterprise Manager compone lo
script con la Having e non con la Where.
Ciao
--
Giorgio Rancati
[Office Access MVP]
Giorgio Rancati
[Office Access MVP]