No estoy seguro de cuál es la mejor manera de abordar esto: creo que se debe usar un pivote/unpivot, pero no estoy seguro de cómo hacerlo funcionar (ya que la columna pivotante no es -numeric)sql query (potencialmente solucionable con pivote/unpivot?)
he la siguiente tabla (basado en una consulta que no se puede modificar):
CREATE TABLE #data
(donor_id NVARCHAR(50)
,last_gift DATETIME
,[2005] NVARCHAR(50)
,numgifts05 INT
,value_05 MONEY
,[2006] NVARCHAR(50)
,numgifts06 INT
,value_06 MONEY
,[2007] NVARCHAR(50)
,numgifts07 INT
,value_07 MONEY
,[2008] NVARCHAR(50)
,numgifts08 INT
,value_08 MONEY
,[2009] NVARCHAR(50)
,numgifts09 INT
,value_09 MONEY
,[2010] NVARCHAR(50)
,numgifts10 INT
,value_10 MONEY
)
INSERT INTO #data VALUES (001,'2000-03-23 00:00:00.000','lapsed donor',0,0.00,'lapsed donor',0,0.00,'lapsed donor',0,0.00,'lapsed donor',0,0.00,'lapsed donor',0,0.00,'lapsed donor',0,0.00)
INSERT INTO #data VALUES (002,'2006-08-01 00:00:00.000','reactivated donor',1,25.00,'2yrs consecutive',2,47.20,'lapsed donor',0,0.00,'lapsed donor',0,0.00,'lapsed donor',0,0.00,'lapsed donor',0,0.00)
INSERT INTO #data VALUES (003,'2010-02-12 00:00:00.000','non-donor',0,0.00,'non-donor',0,0.00,'non-donor',0,0.00,'non-donor',0,0.00,'new donor',2,112.50,'2yrs consecutive',1,116.08)
INSERT INTO #data VALUES (004,'2010-01-04 00:00:00.000','non-donor',0,0.00,'non-donor',0,0.00,'non-donor',0,0.00,'non-donor',0,0.00,'non-donor',0,0.00,'new donor',1,12.00)
INSERT INTO #data VALUES (005,'2009-12-09 00:00:00.000','non-donor',0,0.00,'non-donor',0,0.00,'non-donor',0,0.00,'non-donor',0,0.00,'new donor',1,18.00,'lapsed donor',0,0.00)
INSERT INTO #data VALUES (006,'2005-01-10 00:00:00.000','new donor',1,20.00,'lapsed donor',0,0.00,'lapsed donor',0,0.00,'lapsed donor',0,0.00,'lapsed donor',0,0.00,'lapsed donor',0,0.00)
INSERT INTO #data VALUES (007,'2009-01-07 00:00:00.000','non-donor',0,0.00,'non-donor',0,0.00,'non-donor',0,0.00,'non-donor',0,0.00,'new donor',1,25.00,'lapsed donor',0,0.00)
INSERT INTO #data VALUES (008,'1997-11-05 00:00:00.000','lapsed donor',0,0.00,'lapsed donor',0,0.00,'lapsed donor',0,0.00,'lapsed donor',0,0.00,'lapsed donor',0,0.00,'lapsed donor',0,0.00)
INSERT INTO #data VALUES (009,'1999-06-18 00:00:00.000','lapsed donor',0,0.00,'lapsed donor',0,0.00,'lapsed donor',0,0.00,'lapsed donor',0,0.00,'lapsed donor',0,0.00,'lapsed donor',0,0.00)
INSERT INTO #data VALUES (010,'2010-03-09 00:00:00.000','3/4yrs consecutive',12,120.00,'3/4yrs consecutive',12,120.00,'5yrs+ consecutive',13,142.40,'5yrs+ consecutive',13,170.00,'5yrs+ consecutive',13,160.00,'5yrs+ consecutive',3,30.00)
Y lo que necesito para producir es una tabla que se parece a esto:
Category | 2005 | 2006 | 2007 | 2008 | 2009 | 2010
Lapsed donor | count(lapsed for 2005) |
New donor | count(new donor for 2005) |
2yrs consecutive | count(2yrs consecutive for 2005) |
etc...
Sin embargo, el problema que tengo es que si alguien s un donante caducado en 2005, no están necesariamente en esa categoría para 2006-2010, por lo que una persona tiene el potencial de aparecer en una fila diferente para cada año?
sé que todas las opciones de la categoría son fijos, por lo que no es necesario para el giro dinámico o algo por el estilo, en el caso de que ayuda :)
El objetivo principal es ser capaz de ver un recuento de cada categoría para cada año de un vistazo (para poder comparar todos los años entre sí) - ¡cualquier ayuda apreciada masivamente!
+1 Para DDL útil. –