Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Web программирование > SQL, базы данных
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 11.07.2009, 15:43   #1
Mixasik
New Delphi Coder
Форумчанин Подтвердите свой е-майл
 
Аватар для Mixasik
 
Регистрация: 20.07.2008
Сообщений: 874
По умолчанию Возможно ли так составить SQL вопрос?

Добрый день. Хочу узнать можно ли составить запрос так, что SQL Server(MS) вернет нужное значение например Сам посчитает по заданной формуле, то есть (SELECT count (*)FROM test WHERE NAME=ttt / count (*)FROM test WHERE NAME=aaa)/4; Или же это можно как то сделать через хранимые процедцры SQL? Пожалуйста подскажите.
Страх это слабость и потому, кто испугался уже побежден.
Mixasik вне форума Ответить с цитированием
Старый 12.07.2009, 00:44   #2
psycho-coder
Участник клуба
 
Аватар для psycho-coder
 
Регистрация: 06.04.2009
Сообщений: 1,524
По умолчанию

у меня вот так. но это на MySQL
для SQL Server думаю надо подкоректировать


пример без деления на 4
Код:
select @auth := COUNT(a.id)
from t_author a
where a.name like '%л%'
union

select @usr := count(u.id)
from t_users u 
where u.name like '%к%'
union
select @auth / @usr / 4 #так все выведет в 3 строке
результат в аттаче (без деления на 4)
Вложения
Тип файла: rar att.rar (92.9 Кб, 12 просмотров)

Последний раз редактировалось psycho-coder; 12.07.2009 в 01:10.
psycho-coder вне форума Ответить с цитированием
Старый 12.07.2009, 13:44   #3
Mixasik
New Delphi Coder
Форумчанин Подтвердите свой е-майл
 
Аватар для Mixasik
 
Регистрация: 20.07.2008
Сообщений: 874
По умолчанию

Спиабо, это через процедуры? Или же так возможно составить SQL запрос и что значит "select @auth / @usr / 4 #так все выведет в 3 строке"?
Страх это слабость и потому, кто испугался уже побежден.
Mixasik вне форума Ответить с цитированием
Старый 12.07.2009, 13:47   #4
Mixasik
New Delphi Coder
Форумчанин Подтвердите свой е-майл
 
Аватар для Mixasik
 
Регистрация: 20.07.2008
Сообщений: 874
По умолчанию

Нет, это кажется не процедура))) Это даже лучше чем мне было надо))) Спасибо
Страх это слабость и потому, кто испугался уже побежден.
Mixasik вне форума Ответить с цитированием
Старый 12.07.2009, 14:10   #5
psycho-coder
Участник клуба
 
Аватар для psycho-coder
 
Регистрация: 06.04.2009
Сообщений: 1,524
По умолчанию

Это переменные в SQL.
У Вас работает?
psycho-coder вне форума Ответить с цитированием
Старый 12.07.2009, 14:21   #6
Mixasik
New Delphi Coder
Форумчанин Подтвердите свой е-майл
 
Аватар для Mixasik
 
Регистрация: 20.07.2008
Сообщений: 874
По умолчанию

Я смогу это попробывать только в понедельник, как только попробую обязательно отпишусь, но я надеюсь что будет работать
Но я надеюсь, что это будет работать, потому что это как раз то что нужно
Страх это слабость и потому, кто испугался уже побежден.
Mixasik вне форума Ответить с цитированием
Старый 12.07.2009, 14:25   #7
psycho-coder
Участник клуба
 
Аватар для psycho-coder
 
Регистрация: 06.04.2009
Сообщений: 1,524
По умолчанию

Основная трабла с переменными. Я не знаю как с ними работать в MS SQL.
Ща попробую в Access'e.

По идее должно быть так. Посмотрел в нете про MS SQL Server
Код:
select @auth = COUNT(a.id)
from t_author a
where a.name like '%л%'
union

select @usr = count(u.id)
from t_users u 
where u.name like '%к%'
union
select @auth / @usr / 4
Т.е. тоже самое, только оператор присваивания "=", а не ":=".

Последний раз редактировалось Stilet; 13.07.2009 в 12:46.
psycho-coder вне форума Ответить с цитированием
Старый 12.07.2009, 15:35   #8
Mixasik
New Delphi Coder
Форумчанин Подтвердите свой е-майл
 
Аватар для Mixasik
 
Регистрация: 20.07.2008
Сообщений: 874
По умолчанию

Большое спасибо, все попробую.
Страх это слабость и потому, кто испугался уже побежден.
Mixasik вне форума Ответить с цитированием
Старый 12.07.2009, 18:54   #9
soleil@mmc
SQL-коддинг
Участник клуба
 
Регистрация: 16.01.2009
Сообщений: 1,192
По умолчанию

если в вашей версии работает селект фром селект, то можно получить все одним запросом
Код:
select
  var_A / (4 *var_B) l_Result
from(
select
  (select count (*) from test where name=ttt) var_A,
  (select count (*) from test where name=aaa) var_B
/*from dual в MSSQL вроде как фейковые данные получаются без конкретного обращения*/)
soleil@mmc вне форума Ответить с цитированием
Старый 12.07.2009, 21:16   #10
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

ну, раз все отметились, тогда я предложу ещё два варианта (хотя, думаю, что это по сути одно и тоже):
Код:
SELECT A / (4*B) FROM
(SELECT 
     SUM(IIF(Name='ttt',1, 0)) AS A,
     SUM(IIF(Name='aaa',1, 0)) AS B
  FROM TEST
  WHERE Name in ('ttt','aaa')
)
второй вариант использует CASE, что ближе к стандартам ANSI SQL)
Код:
  
SELECT A / (4*B) FROM
(SELECT 
    sum(case Name when 'ttt' then 1 else 0 end) as A,
    sum(case Name when 'aaa' then 1 else 0 end) as B
  FROM TEST
  WHERE Name in ('ttt','aaa')
)
Serge_Bliznykov вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
SQL подзапрос без сравнения, возможно ? DS75 БД в Delphi 7 03.06.2009 12:32
Поломал голову над SQL запросом из 5-ти таблиц. Возможно ли это? semnily SQL, базы данных 1 06.04.2009 12:24
Вопрос наверное про функции, а так точно даже не знаю про что. (Вопрос начинющего #6) Albert2008 Общие вопросы Delphi 4 21.08.2008 15:33
проблему возможно решить с помощью хранимой процедуры на SQL? yulia БД в Delphi 8 24.05.2007 20:25