2009-06-10 3 views
1

Несколько дней назад я спросил у similar question, но нет никакого вреда в создании более сложной задачи. Короче говоря, я возвращаю набор данных из SQL Server, и я не знаю, как правильно группировать его в отчете.Как объединить несколько строк в один

Вот некоторые примерные данные:

SELECT companyID = 106, userID = 71152, productID = 11,taxID = 216, quantity = 78, total = 71325 UNION ALL 
SELECT companyID = 106, userID = 71152, productID = 11,taxID = 245, quantity = 41, total = 40297 UNION ALL 
SELECT companyID = 106, userID = 71152, productID = 12,taxID = 246, quantity = 12, total = 7685 UNION ALL 
SELECT companyID = 106, userID = 51154, productID = 11,taxID = 216, quantity = 92, total = 84311 UNION ALL 
SELECT companyID = 106, userID = 51154, productID = 11,taxID = 245, quantity = 145, total = 139329 UNION ALL 
SELECT companyID = 106, userID = 51154, productID = 11,taxID = 275, quantity = 80, total = 87513 UNION ALL 
SELECT companyID = 106, userID = 51154, productID = 12,taxID = 246, quantity = 23, total = 15800 UNION ALL 
SELECT companyID = 106, userID = 51154, productID = 12,taxID = 277, quantity = 12, total = 8060 UNION ALL 
SELECT companyID = 106, userID = 51221, productID = 11,taxID = 216, quantity = 4, total = 3655 UNION ALL 
SELECT companyID = 106, userID = 51221, productID = 11,taxID = 245, quantity = 29, total = 29692 UNION ALL 
SELECT companyID = 106, userID = 51221, productID = 11,taxID = 275, quantity = 55, total = 63679 UNION ALL 
SELECT companyID = 106, userID = 51221, productID = 12,taxID = 246, quantity = 3, total = 2390 UNION ALL 
SELECT companyID = 106, userID = 61221, productID = 11,taxID = 216, quantity = 162, total = 138403 UNION ALL 
SELECT companyID = 106, userID = 61221, productID = 11,taxID = 245, quantity = 130, total = 123760 UNION ALL 
SELECT companyID = 106, userID = 61221, productID = 11,taxID = 275, quantity = 19, total = 22073 UNION ALL 
SELECT companyID = 106, userID = 61221, productID = 12,taxID = 246, quantity = 1, total = 415 UNION ALL 
SELECT companyID = 114, userID = 71198, productID = 11,taxID = 245, quantity = 131, total = 134039 UNION ALL 
SELECT companyID = 114, userID = 71198, productID = 11,taxID = 275, quantity = 120, total = 141423 UNION ALL 
SELECT companyID = 114, userID = 71198, productID = 12,taxID = 246, quantity = 70, total = 36590 UNION ALL 
SELECT companyID = 114, userID = 71198, productID = 12,taxID = 249, quantity = 1, total = 980 UNION ALL 
SELECT companyID = 114, userID = 71198, productID = 12,taxID = 276, quantity = 1, total = 790 UNION ALL 
SELECT companyID = 114, userID = 71198, productID = 12,taxID = 277, quantity = 64, total = 41380 UNION ALL 
SELECT companyID = 114, userID = 71198, productID = 12,taxID = 279, quantity = 1, total = 690 UNION ALL 
SELECT companyID = 114, userID = 71198, productID = 12,taxID = 293, quantity = 1, total = 760 UNION ALL 
SELECT companyID = 114, userID = 71204, productID = 11,taxID = 245, quantity = 48, total = 48049 UNION ALL 
SELECT companyID = 114, userID = 71204, productID = 11,taxID = 275, quantity = 41, total = 43729 UNION ALL 
SELECT companyID = 114, userID = 71204, productID = 12,taxID = 246, quantity = 1, total = 450 UNION ALL 
SELECT companyID = 114, userID = 71204, productID = 12,taxID = 249, quantity = 7, total = 5895 UNION ALL 
SELECT companyID = 114, userID = 71204, productID = 12,taxID = 277, quantity = 2, total = 1300 UNION ALL 
SELECT companyID = 114, userID = 71204, productID = 12,taxID = 279, quantity = 2, total = 2230 UNION ALL 
SELECT companyID = 614, userID = 71198, productID = 11,taxID = 216, quantity = 54, total = 48748 UNION ALL 
SELECT companyID = 614, userID = 71198, productID = 11,taxID = 245, quantity = 121, total = 113030 UNION ALL 
SELECT companyID = 614, userID = 71198, productID = 12,taxID = 246, quantity = 11, total = 6080 UNION ALL 
SELECT companyID = 614, userID = 71204, productID = 11,taxID = 216, quantity = 14, total = 11519 UNION ALL 
SELECT companyID = 614, userID = 71204, productID = 11,taxID = 245, quantity = 32, total = 29103 UNION ALL 
SELECT companyID = 614, userID = 71204, productID = 12,taxID = 249, quantity = 3, total = 3535 

В основном, мы продаем конкретный продукт по разным налоговым ставкам. Я хочу, чтобы показать данные, данные группируются по CompanyID, иденты, ProductID, и отображает сумму количества и общих полей, похожее на это:

companyID userID  productID sumQuantity sumTotal 
----------- ----------- ----------- ----------- ----------- 
106   51154  11   317   311153 
106   51154  12   35   23860 
106   51221  11   88   97026 
106   51221  12   3   2390 
106   61221  11   311   284236 
106   61221  12   1   415 
106   71152  11   119   111622 
106   71152  12   12   7685 
114   71198  11   251   275462 
114   71198  12   138   81190 
114   71204  11   89   91778 
114   71204  12   12   9875 
614   71198  11   175   161778 
614   71198  12   11   6080 
614   71204  11   46   40622 
614   71204  12   3   3535 

SSRS не может сгруппировать строки таким образом, потому что taxID является уникальным. Результат можно найти в these screenshots.

Как заставить SSRS объединить несколько записей в одну строку?

+2

Я не понимаю 3 downvotes. Кажется, это разумный вопрос. –

+0

@unforgiven: Откат хороших изменений на вопрос, обратно к огромной, бесполезной стене текста с ошибками - всегда хороший способ получить downvotes. – GEOCHET

+1

Богатый: ничего неправильного с предоставлением описания моей ошибки, желаемого решения и образцов данных для экспериментов. Мой пост получил свои downvotes после того, как он был целенаправленно искажен в последнем редактировании. Серьезно, почему вы не были запрещены? – Juliet

ответ

0

Похоже, вы положили заголовки в строку группировки и свои данные в деталях. Поместите заголовки в строку заголовка, данные в строке группировки и удалите или скройте детали.

+0

Это делает именно то, что я хочу, спасибо :) – Juliet

+0

Кстати, похоже, что кто-то занижал это (я могу сказать, потому что я его поддержал, и оценка по-прежнему равна нулю). Я поддержал один из ваших других ответов, чтобы компенсировать это. Последнее: используя ваше предложение, я удалил часть неприятного взлома в этом отчете и его время работы сократилось с 40 минут до 8 минут. Еще раз спасибо :) – Juliet

+0

Я думал, что вы, возможно, троллинг. –

0

Похоже, что вы можете захотеть задуматься о создании собственного calculated fields, который будет содержать агрегированные итоговые значения.

Редактировать: Как и в моем комментарии к другому ответу: создайте другой набор данных, который будет агрегировать данные так, как вы хотите. Если вы не имеете дело с чудовищными возвращаемыми строками, это не должно быть проблемой производительности, и в долгосрочной перспективе это, вероятно, намного лучше, чем пытаться взломать решение из набора данных, который может оказаться непригодным.

+1

Данные в порядке, как есть, и ему/ей не нужны никакие вычисленные поля. Да, агрегация поможет, но ему просто нужно научиться использовать элемент управления таблицей. –

3

Почему вы просто не бросаете таксид из предложения select и grouping запроса SQL? Это даст вам то, что вы хотите.

+0

Да, изменение запросов (или просто использование другого набора данных с различными запросами, если вам нужна эта информация в другом месте) было бы самым простым решением. Я изначально думал о том, чтобы предположить, что я сам, но не был уверен, что это будет возможно для нее. – TheTXI

+1

К сожалению, я не могу отказаться от налогового идентификатора, потому что он используется другими разделами данных в отчете. – Juliet

+0

Затем сделайте то, что я предложил, и создайте другой набор данных, который будет агрегировать данные так, как вы хотите. Если вы не имеете дело с чудовищными возвращаемыми строками, это не должно быть проблемой производительности, и в долгосрочной перспективе это, вероятно, намного лучше, чем пытаться взломать решение из набора данных, который может оказаться непригодным. – TheTXI

Смежные вопросы