You build a constituent query, add gift date and amount from revenue, and the results balloon: one donor who gave four times now shows up on four rows. What you actually wanted was one row per person with Gift 1, Gift 2, Gift 3 across the page, the way a board report or a solicitation list usually looks.
That layout is a pivot, and Altru’s ad-hoc query tool doesn’t produce it directly. Below is why, what you can get inside Altru, and the cleanest ways to finish the job outside it.
Why the query gives you rows instead of columns
An Altru query is built around one record type, the one you chose when you started it. When you pull in fields from a related area that can have many entries per constituent, like revenue, the query returns one row for every match. That’s correct behavior for a relational query; it just isn’t the shape you need.
As far as we know, the query designer has no setting that turns “the 1st, 2nd and 3rd related gift” into separate output columns. If you’re on a newer release and suspect that has changed, check it in a test query or ask Blackbaud support before you build a process around it.
What you can do inside Altru
Before reaching for a spreadsheet, decide whether you really need every gift as its own column. Often the question behind the request is simpler, and Altru can answer it on one row per constituent.
Summarize instead of listing
Query output fields from a one-to-many area can usually be summarized rather than listed. Setting gift amount to a sum, count, or maximum, and gift date to a minimum or maximum, collapses the results back to one row per person. That covers “total given,” “number of gifts,” “first gift date,” and “largest gift” without any extra work.
Use smart fields for recurring needs
If your organization asks the same giving questions every month, smart fields are worth setting up. They calculate a value per constituent (a lifetime total, a most-recent date, a count in a date range) and appear in queries as ordinary one-row fields. They also run faster than summarizing revenue on the fly in a large query. Smart fields refresh on a schedule, so confirm the refresh timing before you trust them for a same-day list.
Build narrow queries for specific columns
When you need a short, fixed set of columns, such as “last fiscal year’s total” next to “this fiscal year’s total,” you can filter separate queries to each date range and summarize each one. It’s clunky for more than two or three columns, but it keeps everything in Altru and repeatable.
When you truly need Gift 1, Gift 2, Gift 3
Sometimes the report really does call for each gift on its own line across: a stewardship review, an acknowledgment audit, a donor history for a major gift prospect. For that, export the row-per-gift query and pivot it in a spreadsheet.
- Keep the query lean. Include the constituent’s lookup ID, name, gift date, gift amount, and anything else you need per gift (designation, payment method). Add filters for the date range so you aren’t exporting every gift since launch.
- Sort by lookup ID, then gift date. Do this in the query’s sort settings or after export. Order matters for the next step.
- Add a gift number column. With lookup ID in column A and data starting on row 2, put
=COUNTIF($A$2:A2,A2)in a new column and fill down. Each donor’s gifts become 1, 2, 3 in date order. - Pivot. In Excel or Google Sheets, create a pivot table with lookup ID and name as rows, gift number as columns, and gift amount (set to Sum or Max) as values. Repeat with gift date if you want dates alongside amounts.
- Cap the columns. If one donor gave forty times, you’ll get forty columns. Filter the gift number to the first five, or the most recent five by sorting descending before you number them.
If you’d rather avoid a pivot table, a formula approach works too. Build a combined key of lookup ID plus gift number, then use XLOOKUP (or INDEX/MATCH) on a one-row-per-donor sheet to pull “ID-1,” “ID-2,” and so on into fixed columns. This is easier to hand to a colleague because the layout never shifts.
Common snags
- Duplicate donors inflate gift counts the wrong way. If one person exists as two constituent records, their gifts split across two rows. Clean up obvious duplicates before trusting a giving history.
- Household versus individual giving. Decide whether gifts should roll up to the household or stay with the individual, and choose the query’s base record accordingly.
- Revenue types you didn’t intend. Memberships, ticket sales, and donations can all live in revenue. Filter by revenue type or designation so the “gifts” in your columns are actually gifts.
- Stale exports. A pivoted spreadsheet is a snapshot. Note the export date on the sheet so nobody works from last quarter’s numbers.
Keeping the spreadsheet current
The pivot itself is quick. The tedious part is re-running the query, exporting, and pasting every time someone wants an updated view. Social Good’s Data Bridge syncs Altru query results to Google Sheets, so the row-per-gift data lands on one tab and your gift-number formula and pivot on another tab can read from it without a manual export each time. The pivoting logic still lives in the sheet; Data Bridge just keeps the source rows fresh.
Quick answers
Can an Altru query output each gift as its own column?
Not that we’re aware of. The query returns one row per related gift. Summarize for single values, or pivot the export for multiple gifts across.
What’s the fastest way to get first gift and last gift on one row?
Summarize gift date as minimum and maximum in the query, or use smart fields if you need it regularly. Getting the matching amounts for those dates usually needs a smart field or the spreadsheet method.



