![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Сложный 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