Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Сложный SQL запрос с несколькими вложенными [D6, SYBASE]


victor_ch ©   (2002-09-17 10:42:00) 

Помогите пожалуйста с формированием SQL запроса, я что-то запарился

у меня есть одна таблица и я из нее несколькими отдельными запросами вытаскиваю данные
можно ли объединить все эти запросы в один чтобы каждый отдельный запрос выдавал данные в свое поле

запрос1
Select
SDATE, sum(BOOKCNT) "INVHOST"
from table
where
SDATE="01/01/02" and
INVHOST like "23%"
group by
SDATE

запрос2
Select
SDATE, sum(BOOKCNT) "DSHOST"
from table
where
SDATE="01/01/02" and
DSHOST like "23%"
group by
SDATE

я хочу получить в после объединения в результате что-то типа

Дата INVHOST DSHOST
01.01.2002 100 200
01.02.2002 40 10
01.03.2002 25 10


Fiend   (2002-09-17 13:08:00) [1]

То ЮЮ
Не знаю как в Сибейз, но в MS SQL такая конструкция селекта поддерживается с 7 версии.

А вот CASE должен работать. может я где синтаксические ошибки допустил?

У меня просто есть прога, которая работала еще для MSSQL 6.5, и там в запросах повсеместно использовался CASE, именно для таких нужд.


victor_ch   (2002-09-17 13:07:00) [2]

огромное спасибо Johnmen
вот в таком варианте работает


ЮЮ   (2002-09-17 13:02:00) [3]

>Сибейз и есть MSSQL6.5
Значит
Select * from
(Select * from Table) SubSelect
поддерживается?


Fiend   (2002-09-17 12:53:00) [4]

То victor_ch
как это не поддерживается?

В MSSQL 6.5 это работает, а Сибейз и есть MSSQL6.5, тока у тя наверно уже более новая версия. Почитай мануалы. Должно работать

Можно и как Johnmem грит


Johnmen   (2002-09-17 12:47:00) [5]

Попробуй так...
SELECT
A.SDATE,
(SELECT SUM(B.BOOKCNT) FROM table B
WHERE (B.SDATE=A.SDATE) AND (INVHOST LIKE "23%")) "INVHOST",
(SELECT SUM(C.BOOKCNT) FROM table C
WHERE (C.SDATE=A.SDATE) AND (DSHOST LIKE "23%")) "DSHOST"
FROM table A
GROUP BY A.SDATE


victor_ch   (2002-09-17 12:38:00) [6]

к сожалению такой синтаксис c CASE не поддерживается
база под SYBASE надо что-то более стандартное


Fiend   (2002-09-17 12:02:00) [7]

select sum(case when substring(invhost,1,2)="23" then bookcnt end) as "INVHOST",
sum(case when substring(dshost,1,2)="23" then bookcnt end) as "DSHOST"
from Table
where SDATE="01/01/02"
group by SDate


victor_ch   (2002-09-17 11:56:00) [8]

да нужно что-то типа этого
вложенные запросы в select
или во from

но я перепробовал кучу вариантов не идет не один
выскакивает реплика SQL error итд

может кто подскажет поподробнее весь синтаксис


Johnmen   (2002-09-17 11:30:00) [9]

Да, виноват, был невнимателен...
Копать в направлении
SELECT SDATE,SELECT SUM(),SELECT SUM()...
FROM table
WHERE ...
GROUP BY SDATE
если такой синтаксис поддерживается...


victor_ch   (2002-09-17 11:02:00) [10]

нет в одном случае должно поле INVHOST like "23%"
а в другом случае DSHOST like "23%"

всего в исходной таблице 6 полей
SDATE REIS AK BOOKCNT INVHOST DSHOST
01.01.02 1001 хи 4 23РОВ
01.01.02 1002 ХИ 5 23ТАС
01.02.02 1001 ПЛ 10 23УКК

поля INVHOST,DSHOST могут содержать строку типа "23jkj" или "20klk"
только по отдельности, или оба быть пустыми


Johnmen   (2002-09-17 10:48:00) [11]

А в чем проблема то ?
Select
SDATE, sum(BOOKCNT) "INVHOST", sum(BOOKCNT) "DSHOST"
from table
where
SDATE="01/01/02" and
INVHOST like "23%"
group by
SDATE


Наверх

Титульная страница Поиск, карта сайта Написать письмо