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

#6 Ele
14/10/2008 - 18:40 | Informe spam
Hola
al parecer para sacar este estadistico de dias por cliente es necesario
hacer una seleccion intermedia que bien puede ser una tabla temporal o usar
las derivadas, si tienes la version 2005 tablas CTE

checa si esto te funciona
Select t.Idcustomer, Count(*)
From (Select Distinct Idcustomer, Date
From Orderlines
Where date between '20080801' and '20080930' )
t


"Mauricio" escribió en el mensaje
news:
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


Respuesta Responder a este mensaje
#7 Carlos M. Calvelo
14/10/2008 - 19:43 | Informe spam
Hola Ele,

On 14 okt, 18:40, "Ele" wrote:
Hola
al parecer para sacar este estadistico de dias por cliente es necesario
hacer una seleccion intermedia que bien puede ser una tabla temporal o usar
las derivadas, si tienes la version 2005 tablas CTE

checa si esto te funciona
Select t.Idcustomer, Count(*)
From (Select Distinct Idcustomer, Date
    From Orderlines
  Where  date between '20080801' and '20080930' )
     t




Te falta el 'group by t.Idcustomer' al final.

Saludos,
Carlos
email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una pregunta AnteriorRespuesta Tengo una respuesta
Search Busqueda sugerida