Sign Up

Sign Up to our social questions and Answers Engine to ask questions, answer people’s questions, and connect with other people.

Have an account? Sign In

Have an account? Sign In Now

Sign In

Login to our social questions & Answers Engine to ask questions answer people’s questions & connect with other people.

Sign Up Here

Forgot Password?

Don't have account, Sign Up Here

Forgot Password

Lost your password? Please enter your email address. You will receive a link and will create a new password via email.

Have an account? Sign In Now

You must login to ask a question.

Forgot Password?

Need An Account, Sign Up Here

Please briefly explain why you feel this question should be reported.

Please briefly explain why you feel this answer should be reported.

Please briefly explain why you feel this user should be reported.

Sign InSign Up

The Archive Base

The Archive Base Logo The Archive Base Logo

The Archive Base Navigation

  • Home
  • SEARCH
  • About Us
  • Blog
  • Contact Us
Search
Ask A Question

Mobile menu

Close
Ask a Question
  • Home
  • Add group
  • Groups page
  • Feed
  • User Profile
  • Communities
  • Questions
    • New Questions
    • Trending Questions
    • Must read Questions
    • Hot Questions
  • Polls
  • Tags
  • Badges
  • Buy Points
  • Users
  • Help
  • Buy Theme
  • SEARCH
Home/ Questions/Q 1065397
In Process

The Archive Base Latest Questions

Editorial Team
  • 0
Editorial Team
Asked: May 16, 20262026-05-16T19:47:43+00:00 2026-05-16T19:47:43+00:00

I’m not sure how best to approach this – I think a pivot /

  • 0

I’m not sure how best to approach this – I think a pivot / unpivot should be used, but not sure how to make it work (as pivoting column is a non-numeric)

I have the following table (based on a query I can’t modify):

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)

And what I need to produce is a table which looks like this:

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...

However the problem I have is that if someone is a lapsed donor in 2005, they aren’t necessarily in that category for 2006-2010, so one person has the potential to appear in a different row for each year?

I know that all of the category options are fixed, so there is no need for dynamic pivoting or anything like that, in case it helps 🙂

The main objective is to be able to see a count of each category for each year at a glance (so i cna compare all years against each other) – any help massively appreciated!!

  • 1 1 Answer
  • 0 Views
  • 0 Followers
  • 0
Share
  • Facebook
  • Report

Leave an answer
Cancel reply

You must login to add an answer.

Forgot Password?

Need An Account, Sign Up Here

1 Answer

  • Voted
  • Oldest
  • Recent
  • Random
  1. Editorial Team
    Editorial Team
    2026-05-16T19:47:44+00:00Added an answer on May 16, 2026 at 7:47 pm

    Is this what you need?

    SELECT Category,[2005],[2006],[2007],[2008],[2009],[2010]  
    FROM 
    (SELECT [2005],[2006],[2007],[2008],[2009],[2010],donor_id FROM #DATA) P
    UNPIVOT  (Category FOR [YEAR] IN 
          ([2005],[2006],[2007],[2008],[2009],[2010])
    )AS unpvt
    PIVOT
    (
    COUNT (donor_id)
    FOR [YEAR] IN
    ( [2005],[2006],[2007],[2008],[2009],[2010])
    ) AS pvt
    ORDER BY Category
    

    Returns

    Category                       2005        2006        2007        2008        2009        2010
    ------------------------------ ----------- ----------- ----------- ----------- ----------- -----------
    2yrs consecutive               0           1           0           0           0           1
    3/4yrs consecutive             1           1           0           0           0           0
    5yrs+ consecutive              0           0           1           1           1           1
    lapsed donor                   3           4           5           5           5           7
    new donor                      1           0           0           0           3           1
    non-donor                      4           4           4           4           1           0
    reactivated donor              1           0           0           0           0           0
    

    Following Clarification

    With base AS
    (
    SELECT 2005 as [Year], [2005] as Category, numgifts05 as numgifts,  value_05  as value
    from #data
    union all
    SELECT  2006 as [Year], [2006] as Category, numgifts06 as numgifts,  value_06  as value
    from #data
    )
    select 
        Category
        ,COUNT(case when [Year]=2005 then 1 end) as [2005]
        ,SUM(case when [Year]=2005 then numgifts end) as [numgifts05]
        ,SUM(case when [Year]=2005 then value end) as [value_05]
        ,COUNT(case when [Year]=2006 then 1 end) as [2006]
        ,SUM(case when [Year]=2006 then numgifts end) as [numgifts06]
        ,SUM(case when [Year]=2006 then value end) as [value_06]
    from base
    group by Category
    order by Category
    
    • 0
    • Reply
    • Share
      Share
      • Share on Facebook
      • Share on Twitter
      • Share on LinkedIn
      • Share on WhatsApp
      • Report

Sidebar

Related Questions

No related questions found

Explore

  • Home
  • Add group
  • Groups page
  • Communities
  • Questions
    • New Questions
    • Trending Questions
    • Must read Questions
    • Hot Questions
  • Polls
  • Tags
  • Badges
  • Users
  • Help
  • SEARCH

Footer

© 2021 The Archive Base. All Rights Reserved
With Love by The Archive Base

Insert/edit link

Enter the destination URL

Or link to existing content

    No search term specified. Showing recent items. Search or use up and down arrow keys to select an item.