Consulta para contar registros (2008-10-14)

14/10/2008 - 12:01 por Mauricio | Informe spam
Hola a todos,
tengo una tabla con la siguiente estructura:
CREATE TABLE [dbo].[OrderLines](
[IDORDERLINES] [int] IDENTITY(1,1) NOT NULL,
[IDCUSTOMER] [int] NULL,
[IDPRODUCT] [int] NULL,
[PRODUCTNAME] [varchar](200) NULL,
[QUANTITY] [int] NULL,
[PRICE] [decimal](18, 2) NULL,
[IDMENU] [int] NULL,
[MENULINE] [tinyint] NULL,
[DATE] [datetime] NULL,
[VAT] [decimal](18, 2) NULL,
[MCS_OrderNumber] [int] NULL,
[DATECREATION] [datetime] NULL,
[IDDELIVERING] [int] NULL

Necesito contar la cantidad de días que se han registrado órdenes
para cada cliente. Hay veces que para un determinado día un cliente
tiene más de una línea pero necesito contar ese día sólo como 1.
Ejemplo:
Select Idcustomer, Date, count(*)
From Orderlines
Where date between '20080801' and '20080930'
Group by idcustomer, date

Arroja este resultado:

110 2008-08-18 00:00:00.000 1
110 2008-08-21 00:00:00.000 1
110 2008-09-10 00:00:00.000 1
110 2008-09-12 00:00:00.000 1
111 2008-08-14 00:00:00.000 1
111 2008-08-18 00:00:00.000 1
111 2008-08-20 00:00:00.000 2
111 2008-08-21 00:00:00.000 1
111 2008-08-25 00:00:00.000 1
111 2008-08-27 00:00:00.000 1
111 2008-08-28 00:00:00.000 1
111 2008-09-22 00:00:00.000 1
111 2008-09-24 00:00:00.000 1
111 2008-09-25 00:00:00.000 1
111 2008-09-29 00:00:00.000 1
115 2008-08-18 00:00:00.000 2
115 2008-08-19 00:00:00.000 2
115 2008-08-20 00:00:00.000 2
115 2008-08-21 00:00:00.000 2

Las líneas que tienen un 2 deben contarse como un 1. Para ser más
claro, para el IdCustomer= 110, el valor que debo obtener es 4, para el
111, 11, etc.
Hay forma de obtener estos resultados con un solo select, sin
necesidad de hacer una tabla temporal o algo así?
Muchas gracias por la respuesta.
Saludos.


Mauricio
Copenhague, Dinamarca
 

Leer las respuestas

#1 Carlos M. Calvelo
14/10/2008 - 14:31 | Informe spam
Hola Mauricio,

On 14 okt, 12:01, Mauricio
wrote:
Hola a todos,
   tengo una tabla con la siguiente estructura:
CREATE TABLE [dbo].[OrderLines](
        [IDORDERLINES] [int] IDENTITY(1,1) NOT NULL,
        [IDCUSTOMER] [int] NULL,
        [IDPRODUCT] [int] NULL,
        [PRODUCTNAME] [varchar](200) NULL,
        [QUANTITY] [int] NULL,
        [PRICE] [decimal](18, 2) NULL,
        [IDMENU] [int] NULL,
        [MENULINE] [tinyint] NULL,
        [DATE] [datetime] NULL,
        [VAT] [decimal](18, 2) NULL,
        [MCS_OrderNumber] [int] NULL,
        [DATECREATION] [datetime] NULL,
        [IDDELIVERING] [int] NULL

   Necesito contar la cantidad de días que se han registrado órdenes
para cada cliente. Hay veces que para un determinado día un cliente
tiene más de una línea pero necesito contar ese día sólo como 1.
   Ejemplo:
Select Idcustomer, Date, count(*)
From Orderlines
Where  date between '20080801' and '20080930'
Group by idcustomer, date




Prueba con:

Select Idcustomer, count(distinct Date)
From Orderlines
Where date between '20080801' and '20080930'
Group by idcustomer

Saludos,
Carlos

Preguntas similares