2012-06-27 5 views
0

У меня есть группы предметов. Каждая группа имеет основной элемент или заголовок, допустим, в этой группе есть элементы внутри него.Группа по категориям

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

Например: стол, как этот

Code   Description  Price 
----------- -------------  ----- 
12-5000  Toys 
12-5000-100 FIFA Game   200$ 
12-5000-200 PEPSI MAN   150$ 
12-5000-300 X-MEN    120$ 
12-6000  Movies 
12-6000-100 Scarface   200$ 
12-6000-200 BADBOYS1   200$ 
12-6000-300 GODFAther1   120$ 

Результат, который я умираю, чтобы получить:

Description Total 
----------- ----- 
Toys   470 
Movies  520 
+4

У вас действительно есть категории и продуктов в одной таблице? –

+0

Что означает, когда цена пуста? Это на самом деле 0 в вашей таблице, NULL, что-то еще? –

+0

пусто, потому что я импортировал из листа Excel, так что это не null, я могу проверить его с помощью функции LEN() –

ответ

0
select description, sum(price) 
from tableName 
group by description 

не может быть так просто?

EDIT

я вижу. У вас есть заголовки (th) & строк (tr) в одной таблице. Затем вам нужно изолировать их на две псевдо таблицы. Может быть, это:

select th.description, SUM(tr.price) 
from tableName th 
left join tableName tr 
on tr.code like th.code + '-%' 
where th.code like '[0-9][0-9]-[0-9][0-9][0-9][0-9]' 
group by th.description 
+0

Нет, потому что это будет показывать отдельные строки для 'FIFA Game',' Pepsi Man' и т. Д. Группирование не должно находиться в столбце описания. –

+0

Не мог понять это немного. –

+0

th - отфильтрованный список записей «заголовка». Я делаю фильтрацию, сопоставляя шаблон из 2 цифр, тире, затем 4 цифры. В решении Aaron (лучше) он делает то же самое, используя LEN (цена) = 0. После того, как у вас есть записи th, я снова присоединился к таблице, как записи tr (detail row). Соединение находится в том же коде заголовка, с тире, а затем что-то еще (% wildcard). Суммируйте значения в строках и группируйте по описанию заголовка. – Sean

6
;WITH x AS 
(
    SELECT Code, Description FROM dbo.Table 
    WHERE price IS NULL -- =0? can't tell what blank means 
) 
SELECT x.Description, SUM(t.Price) 
FROM dbo.Table AS t 
INNER JOIN x 
ON LEFT(t.Code, 7) = x.Code 
AND t.Code > x.Code 
GROUP BY x.Description; 

EDIT

Поскольку мы узнали, что цена буквально хранится в виде строки, как '400$' ...

;WITH x AS 
(
    SELECT Code, Description FROM dbo.Table 
    WHERE LEN(price) = 0 
) 
SELECT x.Description, SUM(CONVERT(DECIMAL(18,2), REPLACE(t.Price,'$',''))) 
FROM dbo.Table AS t 
INNER JOIN x 
ON LEFT(t.Code, 7) = x.Code 
AND t.Code > x.Code 
GROUP BY x.Description; 
+0

Я пробовал ваш код здесь, он ничего мне не даст, вы знаете, что это немного дамп, но код и описание и цена в одной таблице не являются профессиональными. Спасибо в любом случае –

+0

@ user1400575 Что значит «ничего тебе не даст»? –

+0

Если я запустил внутренний выбор, он ничего не приносит мне, если я добавлю не или <>, он приносит мне данные, но сумма исправлена ​​«4084» оцените вашу помощь. Aaron –

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