Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Программирование [игнор отключен] [закрыт для гостей] / Запрос SQL / 23 сообщений из 23, страница 1 из 1
14.05.2013, 17:09
    #38256988
MedBrat777
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запрос SQL
Доброго времени суток. Решаю такую задачу: есть ряд столбцов A, B, C. Значения столбцов A идентичны. Значения столбцов B надо сложить, но есть столбец C значения которого могут быть null или "блаблабла". Мне необходимо получить в итоге одну строку. A, B= общая сумма всех значений строк, C="блаблабла". (т.е. null будто бы и нет, но в сумме столбца B учтены).

Подскажите каким образом реализовать этот запрос. Заранее спасибо!
...
Рейтинг: 0 / 0
14.05.2013, 17:14
    #38256998
Яростный Меч
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запрос SQL
Код: sql
1.
2.
select max(a), sum(b), max(c)
from tabl
...
Рейтинг: 0 / 0
14.05.2013, 17:53
    #38257115
Akina
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запрос SQL
СУБД-то хоть какая? И что всё-таки надо получить в поле, сотворённом из поля С - что-нить одно из всех? определённое (тот же максимум)? конкатенацию?
...
Рейтинг: 0 / 0
15.05.2013, 11:53
    #38257891
MedBrat777
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запрос SQL
SQL Server. Я решил квест может не самым правильным, но рабочим способом. написал представление, которое фильтрует только значение столбца <> '' и подтянул к таблице. Group by сработал на ура.
...
Рейтинг: 0 / 0
15.05.2013, 11:58
    #38257911
Akina
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запрос SQL
MedBrat777SQL Server.Какой именно?
...
Рейтинг: 0 / 0
15.05.2013, 14:22
    #38258400
MedBrat777
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запрос SQL
MS
...
Рейтинг: 0 / 0
15.05.2013, 14:30
    #38258421
MedBrat777
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запрос SQL
Microsoft SQL Server Enterprise Edition (64-bit) если быть точным)
...
Рейтинг: 0 / 0
15.05.2013, 19:17
    #38259059
White Owl
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запрос SQL
MedBrat777Microsoft SQL Server Enterprise Edition (64-bit) если быть точным)Ты забыл еще одну часть названия - год.
А ее забывать нельзя ни в коем случае, потому что разница бывает очень большой.
...
Рейтинг: 0 / 0
16.05.2013, 09:38
    #38259629
MedBrat777
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запрос SQL
2008
...
Рейтинг: 0 / 0
17.05.2013, 11:35
    #38261617
MedBrat777
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запрос SQL
Яростный Меч,

не работает max... оба поля и null и "бла" выдает
...
Рейтинг: 0 / 0
17.05.2013, 12:19
    #38261705
Akina
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запрос SQL
Akinaчто всё-таки надо получить в поле, сотворённом из поля С - что-нить одно из всех? определённое (тот же максимум)? конкатенацию?
...
Рейтинг: 0 / 0
17.05.2013, 17:48
    #38262486
MedBrat777
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запрос SQL
Akina,

ок. давай контанацию. SUM для char не катит же...
...
Рейтинг: 0 / 0
17.05.2013, 17:49
    #38262487
MedBrat777
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запрос SQL
MedBrat777Akina,

ок. давай конкатенацию . SUM для char не катит же...

опечатался.
...
Рейтинг: 0 / 0
17.05.2013, 23:02
    #38262841
Akina
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запрос SQL
Эххх.. вот с конкатенацией для группы у MS SQL хреновенько, нету готовой групповой функции... придётся, скажем, подзапрос делать.. будет что-то типа

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
select
  t1.a
, sum(t1.b)
, (
    select 
      coalesce(t2.c,'') 
    from 
      tabl t2 
    where 
      t1.a=t2.a 
    and 
      t1.b=t2.b 
    for xml path('')
  )
from 
  tabl t1 
group by
  t1.a
...
Рейтинг: 0 / 0
17.05.2013, 23:04
    #38262848
Akina
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запрос SQL
Да, при наличии дубликатов по паре (a,b) - будет косить... подзапрос с запросом надо коррелить по ключу либо унику.
...
Рейтинг: 0 / 0
18.05.2013, 00:12
    #38262919
MedBrat777
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запрос SQL
Akina,

почему представление не работает? ума не приложу. Есть поле A в таблице . Связь представления по полю A. В представлении стоит where и два фильтра. <> NULL и <>'' . То есть в идеале после представления должны остаться только записи "блабла". В итоге при выполнении запроса все равно местами выводит пустые записи. не врубаюсь почему... вроде логика грамонтая.
...
Рейтинг: 0 / 0
20.05.2013, 05:05
    #38263929
tanglir
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запрос SQL
MedBrat777<> NULLА ведь в букваре написано, как надо работать с нуллами. Но кто ж его нынче читает?
...
Рейтинг: 0 / 0
20.05.2013, 09:54
    #38264063
MedBrat777
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запрос SQL
tanglir, если ты про IS NOT NULL, то он автоматически меняет через дизайнер <> на IS NOT...
...
Рейтинг: 0 / 0
20.05.2013, 10:18
    #38264096
tanglir
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запрос SQL
Ну тогда эти MedBrat777В итоге при выполнении запроса все равно местами выводит пустые записи"пустые записи" могут состоять из одних пробелов, например... выведите длины этих полей и посмотрите. Вот если и они окажутся нулевыми, тогда надо будет думать.
...
Рейтинг: 0 / 0
21.05.2013, 12:24
    #38266002
MedBrat777
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запрос SQL
Разобрался. В парочке подзапросов криво связи выставил в дизайнере. Сам дурак, короче)
...
Рейтинг: 0 / 0
29.05.2013, 19:17
    #38279188
MasterZiv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запрос SQL
MedBrat777,

Нужно сделать следующие действия:
Задать мне денег, я приеду, изучу структуру вашей бд, архитектуру и назначение приложения.
После этого выяснится главное: что скорее всего этот запрос вам на фиг не нужно писать, а нужно переделывать всю бд чуть более чем наполовину...

Но хоть не зря потратите деньги...
...
Рейтинг: 0 / 0
29.05.2013, 22:01
    #38279330
svlena
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запрос SQL
Что то не совсем понятна задача. Можно пример из того что есть и что нужно.
...
Рейтинг: 0 / 0
31.05.2013, 05:10
    #38281011
mikhail_n
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запрос SQL
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
create table MyTable
(A varchar(10) not null,
 B int not null,
 C varchar(10) null)

go

select * from MyTable

go


Код: sql
1.
2.
3.
4.
5.
6.
A          B           C          
---------- ----------- ---------- 
test       1           bnbnbmbn
test       2           NULL
test       3           bnbnbmbn
test       4           NULL


Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
select isnull(NULL_LESS.A,NULL_ONLY.A) as A, isnull(NULL_LESS.Sum_Less_Nulls,0) + isnull(NULL_ONLY.Sum_Nulls_Only,0), NULL_LESS.C
from
(select A, sum(B) as Sum_Less_Nulls, C
from MyTable
where C is not null
group by A,C) NULL_LESS
full outer join
(select A, sum(B) as Sum_Nulls_Only
from MyTable
where C is null
group by A) NULL_ONLY on NULL_LESS.A = NULL_ONLY.A

go



Код: sql
1.
2.
3.
4.
A                      C          
---------- ----------- ---------- 
test       10          bnbnbmbn
(1 row(s) affected)


Код: sql
1.
2.
3.
select * from MyTable

go


Код: sql
1.
2.
3.
4.
5.
6.
A          B           C          
---------- ----------- ---------- 
test       1           bnbnbmbn
test       3           bnbnbmbn

(2 row(s) affected)


Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
select isnull(NULL_LESS.A,NULL_ONLY.A) as A, isnull(NULL_LESS.Sum_Less_Nulls,0) + isnull(NULL_ONLY.Sum_Nulls_Only,0), NULL_LESS.C
from
(select A, sum(B) as Sum_Less_Nulls, C
from MyTable
where C is not null
group by A,C) NULL_LESS
full outer join
(select A, sum(B) as Sum_Nulls_Only
from MyTable
where C is null
group by A) NULL_ONLY on NULL_LESS.A = NULL_ONLY.A

go


Код: sql
1.
2.
3.
4.
5.
A                      C          
---------- ----------- ---------- 
test       4           bnbnbmbn

(1 row(s) affected)


Код: sql
1.
2.
3.
select * from MyTable

go


Код: sql
1.
2.
3.
4.
5.
6.
A          B           C          
---------- ----------- ---------- 
test       2           NULL
test       4           NULL

(2 row(s) affected)


Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
select isnull(NULL_LESS.A,NULL_ONLY.A) as A, isnull(NULL_LESS.Sum_Less_Nulls,0) + isnull(NULL_ONLY.Sum_Nulls_Only,0), NULL_LESS.C
from
(select A, sum(B) as Sum_Less_Nulls, C
from MyTable
where C is not null
group by A,C) NULL_LESS
full outer join
(select A, sum(B) as Sum_Nulls_Only
from MyTable
where C is null
group by A) NULL_ONLY on NULL_LESS.A = NULL_ONLY.A

go


Код: sql
1.
2.
3.
4.
5.
A                      C          
---------- ----------- ---------- 
test       6           NULL

(1 row(s) affected)
...
Рейтинг: 0 / 0
Форумы / Программирование [игнор отключен] [закрыт для гостей] / Запрос SQL / 23 сообщений из 23, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]