Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Можно ли из двух запросов сделать один?  [new]
Amateur7
Member

Откуда:
Сообщений: 266
Здравствуйте.
Используем MsSQl Server 2008

Код:

$sql1="SELECT name, count(name) as count
FROM (
SELECT name FROM 
Table
WHERE id_city='333' AND id_firm='444' AND id_service='555'
) x
GROUP BY name
";


$res1 = sqlsrv_query($conn, $sql1);

while($i = sqlsrv_fetch_array($res1, SQLSRV_FETCH_ASSOC))
{

$name=($i['name']!='')? $i['name']:'0';


$sql2="SELECT 
ta.unit as ta_unit,
ta.id_producer_goods as ta_id_producer_goods
FROM Table ta
WHERE ta.id_city='333' AND ta.id_firm='444' AND ta.id_service='555' AND ta.name='$name'";

$params = array();
$options =  array( "Scrollable" => SQLSRV_CURSOR_KEYSET );
$res12 = sqlsrv_query($conn, $sql12,$params,$options);
}


Можно ли вместо одно запроса использовать один и если да каким будет его правильный код?
26 сен 13, 13:25    [14887121]     Ответить | Цитировать Сообщить модератору
 Re: Можно ли из двух запросов сделать один?  [new]
Гость333
Member

Откуда:
Сообщений: 3683
Amateur7
Можно ли вместо одно запроса использовать один и если да каким будет его правильный код?

Может, и можно, а может, и нет. Зависит от того, что вы хотите получить в итоге.

Пока что я вижу такое (могу и ошибаться, т.к. код на PHP вижу впервые в жизни):
1) Делается выборка уникальных значений name из таблицы Table с условиями id_city='333' AND id_firm='444' AND id_service='555';
2) Организуется цикл по этим уникальным значениям;
3) В каждой итерации цикла делается выборка из всё той же таблицы Table с такими же условиями, как в п.1, плюс дополнительное условие name='$name';
4) Результаты всех итераций цикла, кроме последней, спускаются в унитаз.

Поправьте меня, если я не прав.
26 сен 13, 13:51    [14887316]     Ответить | Цитировать Сообщить модератору
 Re: Можно ли из двух запросов сделать один?  [new]
Amateur7
Member

Откуда:
Сообщений: 266
Гость333
Amateur7
Можно ли вместо одно запроса использовать один и если да каким будет его правильный код?

Может, и можно, а может, и нет. Зависит от того, что вы хотите получить в итоге.

Пока что я вижу такое (могу и ошибаться, т.к. код на PHP вижу впервые в жизни):
1) Делается выборка уникальных значений name из таблицы Table с условиями id_city='333' AND id_firm='444' AND id_service='555';
2) Организуется цикл по этим уникальным значениям;
3) В каждой итерации цикла делается выборка из всё той же таблицы Table с такими же условиями, как в п.1, плюс дополнительное условие name='$name';
4) Результаты всех итераций цикла, кроме последней, спускаются в унитаз.

Поправьте меня, если я не прав.


Совершенно верно разница в том, что нам нужно сделать Group by только по одному полю - по name.

Но сделать просто:

SELECT
ta.name as ta_name,
count(ta.name) as count,
ta.unit as ta_unit,
ta.id_producer_goods as ta_id_producer_goods
FROM Table ta
WHERE ta.id_city='333' AND ta.id_firm='444' AND ta.id_service='555'
Group by ta_name


нельзя(будет выдавать ошибку в запросе)...

Поэтому и возник данный вопрос....
26 сен 13, 15:58    [14888335]     Ответить | Цитировать Сообщить модератору
 Re: Можно ли из двух запросов сделать один?  [new]
Гость333
Member

Откуда:
Сообщений: 3683
Amateur7,

Немного не понял... Разве вот тут вы спрашивали не то же самое? https://www.sql.ru/forum/1049555/kak-pravilno-vypolnit-zapros
26 сен 13, 16:05    [14888377]     Ответить | Цитировать Сообщить модератору
 Re: Можно ли из двух запросов сделать один?  [new]
Remind
Member

Откуда: UK
Сообщений: 523
Автор, какой результат вы ожидаете увидеть при следующих данных:

name, unit, id_producer_goods, id_city, id_firm, id_service
Alex, 5, 10, 333, 444, 555
Alex, 7, 12, 333, 444, 555
26 сен 13, 16:44    [14888688]     Ответить | Цитировать Сообщить модератору
 Re: Можно ли из двух запросов сделать один?  [new]
Amateur7
Member

Откуда:
Сообщений: 266
Гость333,

Практически да, только здесь я дал полные исходные данные, а там спросил в чем причина ошибки..
26 сен 13, 16:49    [14888735]     Ответить | Цитировать Сообщить модератору
 Re: Можно ли из двух запросов сделать один?  [new]
Amateur7
Member

Откуда:
Сообщений: 266
Amateur7
Гость333,

Практически да, только здесь я дал полные исходные данные, а там спросил в чем причина ошибки..


Плюс там трабл с кодировкой, которого быть не должно...
26 сен 13, 16:50    [14888737]     Ответить | Цитировать Сообщить модератору
 Re: Можно ли из двух запросов сделать один?  [new]
Amateur7
Member

Откуда:
Сообщений: 266
Remind
Автор, какой результат вы ожидаете увидеть при следующих данных:

name, unit, id_producer_goods, id_city, id_firm, id_service
Alex, 5, 10, 333, 444, 555
Alex, 7, 12, 333, 444, 555


такой же, а вот при искходных данных

name, unit, id_producer_goods, id_city, id_firm, id_service
Alex,    6,             10,               333,    444,        555
Alex,    6,             10,               333,    444,        555
Alex,    5,             10,               333,    444,        555
Alex,    5,             10,               333,    444,        555
Alex,    7,             12,               333,    444,        555


я хотел бы получить результат:

name, unit, id_producer_goods, id_city, id_firm, id_service
Alex,    6,             10,               333,    444,        555
Alex,    5,             10,               333,    444,        555
Alex,    7,             12,               333,    444,        555
26 сен 13, 16:52    [14888747]     Ответить | Цитировать Сообщить модератору
 Re: Можно ли из двух запросов сделать один?  [new]
Remind
Member

Откуда: UK
Сообщений: 523
Amateur7,

Тогда чем вас не устраивает запрос вида:

SELECT DISTINCT name, unit, id_producer_goods
FROM Table
WHERE id_city = '333' AND id_firm = '444' AND id_service = '555'
26 сен 13, 16:58    [14888799]     Ответить | Цитировать Сообщить модератору
 Re: Можно ли из двух запросов сделать один?  [new]
Amateur7
Member

Откуда:
Сообщений: 266
Remind
Amateur7,

Тогда чем вас не устраивает запрос вида:

SELECT DISTINCT name, unit, id_producer_goods
FROM Table
WHERE id_city = '333' AND id_firm = '444' AND id_service = '555'


Тем что при данном выполнении повторяются значения name
Посмотрите SQL FIDDLE
26 сен 13, 17:53    [14889132]     Ответить | Цитировать Сообщить модератору
 Re: Можно ли из двух запросов сделать один?  [new]
Remind
Member

Откуда: UK
Сообщений: 523
Amateur7
Тем что при данном выполнении повторяются значения name
Посмотрите SQL FIDDLE

Amateur7
я хотел бы получить результат:

name, unit, id_producer_goods, id_city, id_firm, id_service
Alex,    6,             10,               333,    444,        555
Alex,    5,             10,               333,    444,        555
Alex,    7,             12,               333,    444,        555

Вы сами себе противоречите.
26 сен 13, 18:03    [14889196]     Ответить | Цитировать Сообщить модератору
 Re: Можно ли из двух запросов сделать один?  [new]
prog882
Guest
Amateur7,
declare @t table (name varchar(5),unit int,id_producer_goods int, id_city int,id_firm int,id_service int)
insert @t
select 'Alex',6,10,333,444,555 union all
select 'Alex',6,10,333,444,555 union all
select 'Alex',5,10,333,444,555 union all
select 'Alex',5,10,333,444,555 union all
select 'Alex',7,12,333,444,555

select distinct name,unit,id_producer_goods,id_city,id_firm,id_service,
CountName=COUNT(*) over(partition by name)
from @t
27 сен 13, 08:24    [14890809]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить