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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Запрос с группировкой 
:(
    Опции темы
Колесо
Дата 24.1.2014, 09:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 17
Регистрация: 18.12.2011

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



Здравствуйте.

Имеется таблица примерно такая: 

-----------------------------------------------------------------
|    field1    |    field2    |    field3    |    amount    |
-----------------------------------------------------------------
|    name1    |    null    |    null    | 3000        |
-----------------------------------------------------------------
|    name2    |    mame3    |    name1    |    2000    |
-----------------------------------------------------------------
|    name1    |    name2    |    null    |    1000    |
-----------------------------------------------------------------
|    name1    |    name2    |    name3    |    12000    |    
-----------------------------------------------------------------

Нужно посчитать сумму по каждому человку. Если заполнено поле3, то это сумма относится к человеку, указанному в этом поле, к другим сумма записываться и проверять значения в полях 1 и 2 не обязательно. Если заполнено поле2, то , то это сумма относится к человеку, указанному в этом поле, и проверять знаечение в поле 1 не обязательно. Сумма относится к человеку, указанному в поле 1, если в полях 2 и 3 значения null.

Таким образом для таблицы выше должны получиться такие суммы:

name1=5000
name2=1000
name3=12000

Подскажите как написать такой запрос? нужно использовать T/SQL? 
СУБД MsSQL

 

Это сообщение отредактировал(а) Колесо - 24.1.2014, 09:52
PM MAIL   Вверх
_zorn_
Дата 24.1.2014, 10:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

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



MySQL (что было под рукой)
Код

field1    field2    field3    amount
------------------------------------------------
name1    NULL    NULL    3000
name2    name3    name1    2000
name1    name2    NULL    1000
name1    name2    name3    12000

Код

SELECT IFNULL( field3, IFNULL( field2, field1 ) ) AS name, SUM( amount )
FROM `temp`
GROUP BY name

Код

name    SUM(amount)
------------------------------
name1    5000
name2    1000
name3    12000


У MSSQL вроде ISNULL

Это сообщение отредактировал(а) _zorn_ - 24.1.2014, 10:47
PM MAIL   Вверх
Akina
Дата 24.1.2014, 12:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Советчик
****


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

Репутация: 45
Всего: 454



Код

SELECT COALESCE(field3,field2,field1) AS name, SUM(amount) AS amount
FROM datatable
GROUP BY COALESCE(field3,field2,field1)



--------------------
 О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума.

PM MAIL WWW ICQ Jabber   Вверх
Колесо
Дата 27.1.2014, 15:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 17
Регистрация: 18.12.2011

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



_zorn_
Akina, почему то не правильно считает:
получается 
name    Doc_Number    amount
179    1007134           74.81
179    1007134            74.81
179    1007134                   74.81
179    1007134               74.81

И так 560 строк. Соответственно при группировке сумма получается в 560 раз больше. 


Разделил на 560, проверил по нескольким пользователем. Вроде правильно. 

Спасибо!
PM MAIL   Вверх
Akina
Дата 27.1.2014, 15:58 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Советчик
****


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

Репутация: 45
Всего: 454



Колесо, в начальном посте поля имели другие имена. В последнем посте другое количество полей. Всё это не собирается воедино. 

Поскольку одна и та же строка повторяется кучу раз - есть жестокие подозрения, что решение под реальную структуру адаптировано неправильно. А "деление на 560" - это заведомая грубая ошибка, которая непременно вылезет боком.

Короче, совет применён неверно. Рекомендую не "лабать модельки", а давать настоящую структуру данных.


--------------------
 О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума.

PM MAIL WWW ICQ Jabber   Вверх
Колесо
Дата 5.2.2014, 16:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 17
Регистрация: 18.12.2011

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



Akina, извиняюсь. все действительно работает правильно.
просто джойнились 2 таблицы и не было прописано условия их объединения. еще раз извиняюсь 
PM MAIL   Вверх
Akina
Дата 5.2.2014, 16:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Советчик
****


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

Репутация: 45
Всего: 454



Ну и ладушки. Главное - это что проблема сдохла, остальное мелочи.


--------------------
 О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума.

PM MAIL WWW ICQ Jabber   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Составление SQL-запросов | Следующая тема »


 




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


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

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