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

Preguntas similare

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
Respuesta Responder a este mensaje
#2 Carlos
14/10/2008 - 14:45 | Informe spam
Si es un datetime deberian eliminarle la hora por si acaso.


"Carlos M. Calvelo" escribió en el mensaje
news:
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
Respuesta Responder a este mensaje
#3 Mauricio
14/10/2008 - 14:47 | Informe spam
Gracias Carlos, funcionó perfecto!!!
Me siento mal por no haber pensado en el distinct, como suele pasar
busqué por el lado más difícil.
Muchas gracias nuevamente.

Mauricio

Il se trouve que Carlos M. Calvelo a formulé :
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



Mauricio
Copenhague, Dinamarca
Respuesta Responder a este mensaje
#4 Carlos M. Calvelo
14/10/2008 - 14:58 | Informe spam
Hola Carlos,

On 14 okt, 14:45, "Carlos" <cxx> wrote:
Si es un datetime deberian eliminarle la hora por si acaso.



O no permitir distintas horas (siempre 00:00:00.000).

Saludos,
Carlos
Respuesta Responder a este mensaje
#5 Carlos M. Calvelo
14/10/2008 - 15:02 | Informe spam
Hola Mauricio,

On 14 okt, 14:47, Mauricio
wrote:
Gracias Carlos, funcionó perfecto!!!
Me siento mal ...



Pues no deberías ... :-)

por no haber pensado en el distinct, como suele pasar
busqué por el lado más difícil.



porque eso nos pasa a todos de vez en cuando.

Saludos,
Carlos
Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaSiguiente Respuesta Tengo una respuesta
Search Busqueda sugerida