Модераторы: gambit

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Подскажите как верно сделать группировку, месяц без sql и всё =(( 
:(
    Опции темы
DenWPF
Дата 15.8.2010, 23:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1659
Регистрация: 26.9.2009

Репутация: нет
Всего: 1



есть таблицы
Kyrs из неё надо: id,title,description
Theme - тут содержатся строки с id_Kyrs и price - надо сложить price сложить и вернуть в запросе.
Вот я что то пытаюсь, но блин со всем не так=(

а месяц назад мог=(
Код

SELECT Kyrs.id, Kyrs.title, Kyrs.[description], (SELECT SUM(Theme.price) FROM Theme where id_Kyrs = 1) as prices
FROM Kyrs
where id_Category=1
GROUP BY Kyrs.id


---------
так..как правельно достать сумму я вспомнил

Код

SELECT id_Kyrs,SUM(price) FROM Theme GROUP BY id_Kyrs

но как дальше пока не помню

---------------------
таперь дошел до декартового произведения...а как убрать не могу понять.

Код

SELECT Kyrs.id, Kyrs.title, table2.prices
FROM Kyrs, (SELECT id_Kyrs,SUM(price) as prices FROM Theme GROUP BY id_Kyrs) as table2
where id_Category=1 


Это сообщение отредактировал(а) DenWPF - 15.8.2010, 23:46
PM MAIL   Вверх
Gluttton
Дата 15.8.2010, 23:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Начинающий
***


Профиль
Группа: Завсегдатай
Сообщений: 1170
Регистрация: 28.8.2008
Где: Феодосия

Репутация: нет
Всего: 54



DenWPF, вариантов несколько.
Например можно так:
Код

SELECT
    kyrs.[id],
    kyrs.[title],
    kyrs.[description],
    sum(theme.[price]) as price
FROM kyrs 
    INNER JOIN theme
    ON kyrs.[id]=theme.[id_kyrs]
        WHERE theme.[id_category]=1
    GROUP BY kyrs.[id], kyrs.[title], kyrs.[description]    


Запрос на сервере не проверял - могут быть ошибки.


--------------------
Слава Україні!
PM MAIL   Вверх
jonie
Дата 15.8.2010, 23:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 5613
Регистрация: 21.8.2005
Где: Владимир

Репутация: 8
Всего: 118



наверно можно без группировок используя cross apply ... и вообще : при чем тут C#?


--------------------
Что-то не поняли? -> Напейтесь до зеленых человечков... эта сверхцивилизация Вам поможет...
PM MAIL Jabber   Вверх
DenWPF
Дата 15.8.2010, 23:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1659
Регистрация: 26.9.2009

Репутация: нет
Всего: 1



только одно значение появляется. посмотри я первый пост отредактировал в низу последнее чего я добился

Цитата

наверно можно без группировок используя cross apply ... и вообще : при чем тут C#?



только то что я этот запрос отправляю через C# =)


Это сообщение отредактировал(а) DenWPF - 15.8.2010, 23:51
PM MAIL   Вверх
Gluttton
Дата 15.8.2010, 23:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Начинающий
***


Профиль
Группа: Завсегдатай
Сообщений: 1170
Регистрация: 28.8.2008
Где: Феодосия

Репутация: нет
Всего: 54



DenWPF, так кина не будет!
1. Для составления SQL-запросов существует специализированный раздел.
2. Для того что бы получить максимально правильный ответ в минимальные сроки необходимо привести следующую информацию:
- структура БД в необходимом для решения вопроса объеме (имена таблиц, столбцов, при необходимости типы данных и ограничения);
- набор тестовых данных для БД;
- ожидаемый результат запроса.


Цитата(DenWPF @  15.8.2010,  23:50 Найти цитируемый пост)
только одно значение появляется.

И? Тут ошибка то в чем? В логике или в синтаксисе? Уберите предложение WHERE.
Цитата(DenWPF @  15.8.2010,  23:11 Найти цитируемый пост)
таперь дошел до декартового произведения...а как убрать не могу понять.

Я думаю, что тут нужно не декартово произведение, а внутреннее соединение.
Убрать что? Дублирующие записи - DISTINCT.


--------------------
Слава Україні!
PM MAIL   Вверх
DenWPF
Дата 16.8.2010, 00:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1659
Регистрация: 26.9.2009

Репутация: нет
Всего: 1



disctinct не помог

Код

CREATE TABLE [dbo].[Kyrs] (
  [id] int IDENTITY(1, 1) NOT NULL,
  [id_category] int NOT NULL,
  [discount] int DEFAULT 1 NULL,
  [title] varchar(255) COLLATE Cyrillic_General_CI_AS NOT NULL,
  [description] varchar(1000) COLLATE Cyrillic_General_CI_AS NOT NULL,
  [path] varchar(255) COLLATE Cyrillic_General_CI_AS NULL,
  PRIMARY KEY CLUSTERED ([id]),
)
ON [PRIMARY]
GO

CREATE TABLE [dbo].[Theme] (
  [id] int IDENTITY(1, 1) NOT NULL,
  [id_Kyrs] int NOT NULL,
  [title] varchar(255) COLLATE Cyrillic_General_CI_AS NOT NULL,
  [description] varchar(1000) COLLATE Cyrillic_General_CI_AS NOT NULL,
  [path] varchar(255) COLLATE Cyrillic_General_CI_AS NOT NULL,
  [price] int NOT NULL,
  PRIMARY KEY CLUSTERED ([id]),
  CONSTRAINT [Theme_fk] FOREIGN KEY ([id_Kyrs]) 
  REFERENCES [dbo].[Kyrs] ([id]) 
  ON UPDATE CASCADE
  ON DELETE CASCADE
)
ON [PRIMARY]
GO

INSERT INTO Theme(id_Kyrs,title,description,path,price) VALUEs(2,'Тема 1','Описаниеasd as 1 das ','путь1',100)
INSERT INTO Theme(id_Kyrs,title,description,path,price) VALUEs(2,'Тема 2','Описаниеdfsdaf 2','путь2',300)
INSERT INTO Theme(id_Kyrs,title,description,path,price) VALUEs(2,'Тема 3','Описаниеdsfas 3','путь3',65)
INSERT INTO Theme(id_Kyrs,title,description,path,price) VALUEs(2,'Тема 4','Описаниеafsdf 4','путь4',40)
INSERT INTO Theme(id_Kyrs,title,description,path,price) VALUEs(2, 'Тема 5','Описаниеasdf 5','путь5',10)
INSERT INTO Theme(id_Kyrs,title,description,path,price) VALUEs(2, 'Тема6','Описаниеfsd 6','путь6',10)

INSERT INTO Theme(id_Kyrs,title,description,path,price) VALUEs(1,'Тема 1','Описаниеasd as 1 das ','путь1',100)
INSERT INTO Theme(id_Kyrs,title,description,path,price) VALUEs(1,'Тема 2','Описаниеdfsdaf 2','путь2',30)
INSERT INTO Theme(id_Kyrs,title,description,path,price) VALUEs(1,'Тема 3','Описаниеdsfas 3','путь3',65)
INSERT INTO Theme(id_Kyrs,title,description,path,price) VALUEs(1,'Тема 4','Описаниеafsdf 4','путь4',40)
INSERT INTO Theme(id_Kyrs,title,description,path,price) VALUEs(1, 'Тема 5','Описаниеasdf 5','путь5',10)
INSERT INTO Theme(id_Kyrs,title,description,path,price) VALUEs(1, 'Тема6','Описаниеfsd 6','путь6',10)

insert into Kyrs(id_category, discount,title,description,path) values (1,5,'title','description', 'dasdas');

PM MAIL   Вверх
Gluttton
Дата 16.8.2010, 00:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Начинающий
***


Профиль
Группа: Завсегдатай
Сообщений: 1170
Регистрация: 28.8.2008
Где: Феодосия

Репутация: нет
Всего: 54



DenWPF, совсем другое дело!
А что необходимо получить на выходе? Какие данные?


--------------------
Слава Україні!
PM MAIL   Вверх
DenWPF
Дата 16.8.2010, 00:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1659
Регистрация: 26.9.2009

Репутация: нет
Всего: 1



все данные Kyrs + сумму из значений соответствующее Kyrs.id = Theme.id_kyrs (SELECT id_Kyrs,SUM(price) as prices FROM Theme GROUP BY id_Kyrs)

PM MAIL   Вверх
Gluttton
Дата 16.8.2010, 08:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Начинающий
***


Профиль
Группа: Завсегдатай
Сообщений: 1170
Регистрация: 28.8.2008
Где: Феодосия

Репутация: нет
Всего: 54



Цитата(DenWPF @  16.8.2010,  00:23 Найти цитируемый пост)
Kyrs.id = Theme.id_kyrs (SELECT id_Kyrs,SUM(price) as prices FROM Theme GROUP BY id_Kyrs)

 smile 
Цитата(DenWPF @  16.8.2010,  00:23 Найти цитируемый пост)
все данные Kyrs

Ну так это и будет одна запись.

Цитата(Gluttton @  16.8.2010,  00:13 Найти цитируемый пост)
А что необходимо получить на выходе? Какие данные? 

Я имел в виду не словесное описание (хотя это тоже хорошо), а результат для тестового набора данных.
Например как то так:
Цитата

1     5     title     description     dasdas     255



--------------------
Слава Україні!
PM MAIL   Вверх
DenWPF
Дата 16.8.2010, 10:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1659
Регистрация: 26.9.2009

Репутация: нет
Всего: 1



запрос у меня такой

Код

SELECT Kyrs.title, table2.prices
FROM Kyrs, (SELECT id_Kyrs,SUM(price) as prices FROM Theme GROUP BY id_Kyrs) as table2
where id_Category=1


Код

id    title    prices
1    Курс номер 1    1840
3    курс номер 2 в категории 1    1840
1    Курс номер 1    525
3    курс номер 2 в категории 1    525

а должно быть:
Код

id    title    prices
1    Курс номер 1    1840
3    курс номер 2 в категории 1    525

PM MAIL   Вверх
Gluttton
Дата 16.8.2010, 15:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Начинающий
***


Профиль
Группа: Завсегдатай
Сообщений: 1170
Регистрация: 28.8.2008
Где: Феодосия

Репутация: нет
Всего: 54



DenWPF, 
1. Вы безнадежны - я тестовые данные зачем просил? Что бы украсть Вашу разработку smile ? Тестовые данные вместе с ожидаемым результатом запроса нужны для того, что бы понять логику отбираемых запросом данных! А Вы что? Тестовые данные привели одни, а результат запроса привели другой. И кому они нужны?
2. 
Цитата(DenWPF @  16.8.2010,  10:23 Найти цитируемый пост)
запрос у меня такой
SELECT Kyrs.title, table2.prices
FROM Kyrs, (SELECT id_Kyrs,SUM(price) as prices 
FROM Theme GROUP BY id_Kyrs) as table2 where id_Category=1


Цитата(DenWPF @  16.8.2010,  10:23 Найти цитируемый пост)

id    title    prices
1    Курс номер 1    1840
3    курс номер 2 в категории 1    1840
1    Курс номер 1    525
3    курс номер 2 в категории 1    525


А как это так? В запросы выбирается два столбца, а в результате отображено три?

3. Для приведенного результата преобразование к требуемому виду может быть осуществлено путем "заворачивания" во внешний запрос, следующего вида:
Код

select column1, column2, ..., columnN, sum(columnK)
from
(
...
)    as X
    group by column1, column2, ..., columnN






--------------------
Слава Україні!
PM MAIL   Вверх
DenWPF
Дата 16.8.2010, 16:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1659
Регистрация: 26.9.2009

Репутация: нет
Всего: 1



та ну не сильно же меняется то суть...
я думаю тут больше надо понять суть.


3. - пытался я так не выходит...или не так пытаюсь.
PM MAIL   Вверх
Gluttton
Дата 16.8.2010, 16:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Начинающий
***


Профиль
Группа: Завсегдатай
Сообщений: 1170
Регистрация: 28.8.2008
Где: Феодосия

Репутация: нет
Всего: 54



Цитата(DenWPF @  16.8.2010,  16:24 Найти цитируемый пост)
3. - пытался я так не выходит...или не так пытаюсь.

Возьмите Ваш запрос, который возвращает это:

Цитата(DenWPF @  16.8.2010,  10:23 Найти цитируемый пост)

id    title    prices
1    Курс номер 1    1840
3    курс номер 2 в категории 1    1840
1    Курс номер 1    525
3    курс номер 2 в категории 1    525


И "засунте" его внутрь вот этого:
Код

select id, title, sum(prices)
from
(
... -- сюда вставте запрос
)    as X
    group by id, title


Это сообщение отредактировал(а) Gluttton - 16.8.2010, 16:52


--------------------
Слава Україні!
PM MAIL   Вверх
DenWPF
Дата 16.8.2010, 23:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1659
Регистрация: 26.9.2009

Репутация: нет
Всего: 1



свожу задачу к минимальному.

TABLE1
поля:
id title
данные:
1 название1
2 название2


TABLE2
поля:
id id_table1 price
данные:
1 1 100
2 1 150
3 1 100
4 2 50
5 2 100


мне надо вывести:
название1 350
название2 150



Это сообщение отредактировал(а) DenWPF - 17.8.2010, 02:02
PM MAIL   Вверх
jonie
Дата 17.8.2010, 20:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 5613
Регистрация: 21.8.2005
Где: Владимир

Репутация: 8
Всего: 118



Код

use tempdb;

create table #TABLE1(id int primary key, title nvarchar(128))
create table #TABLE2(id int primary key, id_table1 int, price float);
alter table #table2 add constraint fk_tab1 foreign key (id_table1) references #TABLE1(id);

insert into #TABLE1
select 1,'название1'
union all 
select 2,'название2'


insert into #TABLE2
select 1, 1, 100
union all 
select 2, 1, 150
union all 
select 3, 1, 100
union all 
select 4, 2, 50
union all 
select 5, 2,100


select min(t1.title), sum(t2.price)
from #table1 t1
join #TABLE2 t2 on t1.id=t2.id_table1 
group by t1.id



ПРИ ЧЕМ ТУТ c#??

Это сообщение отредактировал(а) jonie - 17.8.2010, 20:22


--------------------
Что-то не поняли? -> Напейтесь до зеленых человечков... эта сверхцивилизация Вам поможет...
PM MAIL Jabber   Вверх
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
stab
mr.DUDA
Exception

Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов.

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, stab, mr.DUDA, Exception.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Базы данных под .NET | Следующая тема »


 




[ Время генерации скрипта: 0.0576 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.