Все технические форумы на одном сайте Удобный поиск информации с популярных форумов в одном месте
Вопрос: Sql запрос используя odbc драйвер

Всем привет. Подскажите, пожалуйста, почему используя odbc драйвер на windows server 2008 R2 Enterprise выполняя sql запрос частенько вылезает ошибка "DB Error: session not found". Хотя я в скрипте сессию открывал и не закрывал. Влияет ли на это слишком частое выполнение запросов? Просто запросов валиться очень много, примерно 2000 штук подряд.
Ответ:
DanyaNugniy
Влияет ли на это слишком частое выполнение запросов? Просто запросов валиться очень много, примерно 2000 штук подряд.
Не влияет.
DanyaNugniy
выполняя sql запрос частенько вылезает ошибка "DB Error: session not found".
У ошибок обычно есть номера и детальные описания. Мало информации.
Вопрос: sql запрос средняя сумма

Помогите пожалуйста написать sql запрос вывести по каждому работнику среднею сумму по всем заказам.
Пример:
Первая табличка
ID_работника, Фамилия
1 Иванов
2 Петров
3 Соколов
4 Сидоров

Вторая табличка
номер_заказа, ID_работника, date_time, Сумма
1 2 2016-09-13 17:06:43.617 10
2 2 2016-09-13 17:06:43.617 20
3 4 2016-09-13 17:06:43.617 25
Ответ:
k365
Помогите пожалуйста написать sql запрос вывести по каждому работнику среднею сумму по всем заказам.
А какой ваш вариант?
Вопрос: Размер буковочек в окне SQL-запроса. Как побольше сделать ?

Ручками в ACCESS иногда делаю SQL-запросы к базе.
На выходе - нормальная табличка в стиле Excel.
На входе (в запросе) - масюсенькие символы из серии "давай я тебе глазки сломаю".
Кто-то знает - как поправить проблему ?
Буду весьма признателен.
Ответ: в конструкторе запросов и окне SQL:Кнопка офис>параметры>конструкторы объектов
Вопрос: REGEXP_SUBSTR. Разбор SQL запроса по частям.

Помогите, пожалуйста, с шаблоном для REGEXP_SUBSTR для разбора SQL-запроса вида:

SELECT 
            table_alias1.column_name1 AS alias_name1
          , table_alias2.column_name2 AS alias_name2
          , column_name3 AS alias_name3
   FROM 
            table_name1 table_alias1
          , table_name2 table_alias2
          , table_name3
 WHERE 
         table_alias1.column_name20 = 'Condition'
     AND table_alias1.column_name30 between ConditionA and ConditionB
     AND table_alias1.column_name3 = table_alias2.column_name3
;


если рабирать SELECT
table_alias1column_name1alias_name1
table_alias2column_name2alias_name2
column_name3alias_name3


если рабирать FROM
table_name1table_alias1
table_name2table_alias2
table_name3


если разбирать WHERE
table_alias1column_name3table_alias2column_name3



очень признателен!
Ответ:
ORAMIT
для последующего использования в Excel.
когда пытаются разложить структурированный язык на плоские мозги, их плющит, но ничего полезного не выдавливается.
Вопрос: Другие варианты sql запроса

Доброго времени суток, коллеги !
Сегодня ходил на собеседование на позицию Администратора БД и в числе различных запросов по администрированию меня попросили написать запрос для решения задачки:

"В таблицах Students (Id, FIO) хранятся данные о студентах, в таблице Marks (St_Id, Mark) хранятся данные об оценках студентов. Вывести ФИО и количество пятерок для тех студентов, у которых есть не менее 5 двоек в журнале."

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

Мои варианты:
---- Example 1
select Fio, count(*) as amount from Students s
	inner join Marks m on s.id = m.st_id
where Mark = 5
and s.id in (select St_id from (Select st_id, mark, count(*) as amount from Marks
								where mark = 2
								group by st_id, Mark
								having count(*) >= 5
					)x
		)
group by Fio

----- Example 2
select Fio, count(*) as amount from Students s
	inner join Marks m on s.id = m.st_id
where Mark = 5
        and s.id in (Select distinct st_id from Marks m
                        where mark = 2
	                         and (select count(*) from Marks m2
			                where mark = 2 and m2.st_id = m.st_id) >= 5
                       )
group by Fio
Ответ:
invm
select
 s.Fio, count(case when m.mark = 5 then 1 end)
from
 Students s
 inner join Marks m on s.id = m.st_id
group by
 s.Fio
having
 count(case when m.mark = 2 then 1 end) >= 5;


мне больше нравится вариант с sum:
select
s.id, s.Fio, sum(case when m.mark = 5 then 1 else 0 end)
from
 Students s
 inner join Marks m on s.id = m.st_id
group by
s.id,  s.Fio
having
 sum(case when m.mark = 2 then 1 else 0 end) >= 5;
Вопрос: SQL-запросы к БД «Книжное дело»

В данной статье представлены SQL запросы БД «Книжное дело». Статья будет разбита на 4 части.
Может пригодится кому.
!!!19 Запрос отсутствует, не знаю как его реализовать. Если кто-то сделает, буду весьма благодарен.

Создание БД DB_Books :
Кликните здесь для просмотра всего текста
SQL
1
CREATE DATABASE DB_BOOKS

Создание таблиц:
Кликните здесь для просмотра всего текста
SQL
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
USE DB_BOOKS
CREATE TABLE Authors(Code_author INT PRIMARY KEY,
name_author CHAR(30), Birthday DATETIME)
CREATE TABLE Publishing_house(Code_publish INT PRIMARY KEY,
Publish CHAR(30), City CHAR(20))
CREATE TABLE Books(Code_book INT PRIMARY KEY, Title_book
CHAR(40), Code_author INT FOREIGN KEY REFERENCES Authors(
Code_author), Pages INT, Code_publish INT FOREIGN KEY
REFERENCES Publishing_house(Code_publish))
CREATE TABLE Deliveries(Code_delivery INT PRIMARY KEY,
Name_delivery CHAR(30), Name_company CHAR(20), Address
VARCHAR(100), Phone BIGINT, INN CHAR(13))
CREATE TABLE Purchases(Code_purchase INT PRIMARY KEY,
Code_book INT FOREIGN KEY REFERENCES Books(Code_book),
Date_order SMALLDATETIME, Code_delivery INT FOREIGN KEY
REFERENCES Deliveries(Code_delivery), Type_purchase BIT, Cost FLOAT,
Amount INT)

ЗАПРОСЫ:
1.Выбрать все поля из таблицы Deliveries таким образом, чтобы в результате порядок столбцов был следующим: Name_delivery, INN, Phone,
Address, Code_delivery.
Кликните здесь для просмотра всего текста
SQL
1
2
3
SELECT Name_delivery, INN, Phone,
Address, Code_delivery
FROM Deliveries;

2. Выбрать все поля из таблицы Publishing_house таким образом, чтобы в результате порядок столбцов был следующим:
Publish, City,
Code_publish.
Кликните здесь для просмотра всего текста
SQL
1
2
3
SELECT Publish, City,
Code_publish
FROM Publishing_house ;

3. Выбрать из таблицы Books названия книг и количество страниц (поля Title_book и Pages), а из таблицы Authors выбрать имя соответствующего автора книги (поле Name_ author).
Кликните здесь для просмотра всего текста
SQL
1
2
SELECT Title_book, Pages,Name_author
FROM Books, Authors; 

4. Выбрать из таблицы Books названия книг и количество страниц (поля Title_book и Pages), а из таблицы Deliveries выбрать имя соответствующего поставщика книги (поле Name_delivery).
Кликните здесь для просмотра всего текста
SQL
1
2
SELECT Title_book, Pages,Name_delivery
FROM Books, Deliveries;

5. Выбрать из справочника поставщиков (таблица Deliveries) названия компаний, телефоны и ИНН (поля Name_company, Phone и INN), у которых название компании (поле Name_company) начинается с ‘ОАО’.
Кликните здесь для просмотра всего текста
SQL
1
2
3
SELECT Name_company,Phone,INN
FROM Deliveries
WHERE Name_company LIKE 'ОАО%';

6. Выбрать из таблицы Books названия книг и количество страниц (поля Title_book и Pages), а из таблицы Authors выбрать имя соответствующего автора книг (поле Name_ author), у которых в названии книги встречается словосочетание ‘ка’.
Кликните здесь для просмотра всего текста
SQL
1
2
3
4
SELECT Title_book,Pages, Name_author
FROM Books INNER JOIN  Authors
ON Books.Code_book = Authors.Code_author
WHERE Title_book LIKE '%ка%';

7. Вывести список названий издательств (поле Publish) из таблицы Publishing_house, которые не находятся в городе ‘Москва’ (условие по полю City).
Кликните здесь для просмотра всего текста
SQL
1
2
3
SELECT Publish,City
FROM Publishing_house
WHERE City NOT LIKE '%Москва%';

8. Вывести список названий книг (поле Title_book) из таблицы Books, которые выпущены любыми издательствами, кроме издательства ‘Питер-Софт’ (поле Publish из таблицы Publishing_house).
Кликните здесь для просмотра всего текста
SQL
1
2
3
4
SELECT Title_book, Publish
FROM Books INNER JOIN  Publishing_house
ON Books.Code_book = Publishing_house.Code_Publish 
WHERE NOT Publish = 'Питер-Софт';

9. Вывести фамилии, имена, отчества авторов (поле Name_author) из таблицы Authors, у которых дата рождения (поле Birthday) находится в диапазоне 01.01.1840 – 01.06.1860.
Кликните здесь для просмотра всего текста
SQL
1
2
3
SELECT Name_author
FROM Authors
WHERE Birthday BETWEEN '1840-01-01' AND '1860-01-06';

10. Вывести список названий книг (поле Title_book) и количество
страниц (поле Pages) из таблицы Books, у которых объем в страницах укладывается в диапазон 200 – 300 (условие по полю Pages).
Кликните здесь для просмотра всего текста
SQL
1
2
3
SELECT Title_book, Pages
FROM Books
WHERE Pages BETWEEN 200 AND 300;

11. Вывести список фамилий, имен, отчеств авторов (поле Name_author) из таблицы Authors, у которых фамилия начинается на одну из букв диапазона ‘А’ – ‘Г’ (условие по полю Name_author).
Кликните здесь для просмотра всего текста
SQL
1
2
3
SELECT Name_author
FROM Authors
WHERE Name_author LIKE 'А%' OR Name_author LIKE 'Г%';

12. Вывести список названий книг (поле Title_book из таблицы Books)и количество (поле Amount из таблицы Purchases), которые были поставлены поставщиками с кодами 1, 2 (условие по полю Code_delivery из таблицы Purchases).
Кликните здесь для просмотра всего текста
SQL
1
2
3
4
SELECT Title_book, Amount,Code_delivery 
FROM Books INNER JOIN  Purchases
ON Books.Code_book=Purchases.Code_purchase
WHERE Code_delivery IN (1,2);

13. Вывести список названий книг (поле Title_book) из таблицы Books, которые выпущены следующими издательствами: ‘Питер-Софт’, ‘ЛИТЕРА’, (условие по полю Publish из таблицы Publishing_house).
Кликните здесь для просмотра всего текста
SQL
1
2
3
4
SELECT DISTINCT Title_book,Publish
FROM Books INNER JOIN Publishing_house
ON Books.Code_publish = Publishing_house.Code_publish
WHERE Publish IN ('Питер-Софт','ЛИТЕРА');

14. Вывести список авторов (поле Name_author) из таблицы Authors, которые начинаются на букву ‘К’.
Кликните здесь для просмотра всего текста
SQL
1
2
3
SELECT Name_author
FROM Authors
WHERE Name_author LIKE 'К%';

15. Выбрать названия компаний (поле Name_company) из таблицы Deliveries, у которых значение оканчивается на ‘ра’.
Кликните здесь для просмотра всего текста
SQL
1
2
3
SELECT Name_company
FROM Deliveries
WHERE  Name_company LIKE '%ра';

16. Вывести названия издательств (поле Publish) из таблицы Publishing_house, которые содержат в названии сочетание ‘софт’.
Кликните здесь для просмотра всего текста
SQL
1
2
3
SELECT Publish
FROM Publishing_house
WHERE Publish LIKE '%Софт%';

17. Выбрать коды поставщиков (поле Code_delivery), даты заказов (поле Date_order) и названия книг (поле Title_book), если количество книг (поле Amount) в заказе больше 100 или цена (поле Cost) за книгу находится
в диапазоне от 200 до 500.
Кликните здесь для просмотра всего текста
SQL
1
2
3
4
SELECT Code_delivery, Date_order, Title_book,Amount, Cost
FROM Books  INNER JOIN  Purchases
ON Books.Code_book = Purchases.Code_book
WHERE (Amount >100) OR (Cost BETWEEN 200 AND 500); 

18. Вывести список издательств (поле Publish) из таблицы Publishing_house, в которых выпущены книги, названия которых (поле Title_book) начинаются с ‘До’ и город издания (поле City) – ‘Новосибирск’.
Кликните здесь для просмотра всего текста
SQL
1
2
3
4
SELECT Publish, Title_book,City
FROM Books INNER JOIN  Publishing_house
ON Books.Code_publish=Publishing_house.Code_publish
WHERE  Title_book LIKE 'До%' AND City='Новосибирск';

19. Вывести список названий компаний-поставщиков (поле Name_company) и названия книг (поле Title_book), которые они поставили в период с 01.01.2002 по 31.12.2003 (условие по полю Date_order).
Кликните здесь для просмотра всего текста
ЗАПРОС ОТСУТСТВУЕТ

20. Вывести список поставщиков (поле Name_company), которые поставляют книги издательства ‘Питер’ (условие по полю Publish).
Кликните здесь для просмотра всего текста
SQL
1
2
3
4
5
6
7
8
9
10
SELECT DISTINCT Name_company
FROM 
    books b, 
    publishing_house ph,
    purchases p,
    Deliveries d
WHERE b.code_publish=ph.code_publish
AND ph.publish LIKE '%Питер%'
AND b.code_book=p.code_book
AND p.code_delivery=d.code_delivery

21. Вывести стоимость одной печатной страницы каждой книги (использовать поля Cost и Pages) и названия соответствующих книг (поле Title_book).
Кликните здесь для просмотра всего текста
SQL
1
2
3
4
5
SELECT 
    Title_book,Pages, cost/pages AS stoimos  
FROM 
    books INNER JOIN purchases 
    ON Books.Code_book = purchases.Code_book;

22. Вывести количество лет с момента рождения авторов (использовать поле Birthday) и имена соответствующих авторов (поле Name_author).
Кликните здесь для просмотра всего текста
SQL
1
2
SELECT name_author,birthday, Datediff(YEAR,birthday,getdate()) AS vozrast 
FROM authors
Ответ: БД «Книжное дело» Часть 3.

Оператор обработки данных Update
1. Изменить в таблице Books содержимое поля Pages на 300, если код автора (поле Code_author) =14 и название книги (поле Title_book)=’Добро пожаловать в мир, малышка’.
Кликните здесь для просмотра всего текста
SQL
1
2
3
4
5
6
SELECT books.Code_author,Title_book, Pages
FROM Books INNER JOIN Authors
ON Books.Code_author = Authors.Code_author
UPDATE Books
 SET Pages=300
WHERE Code_author=14 AND Title_book='Добро пожаловать в мир, малышка'

2. Увеличить в таблице Purchases цену (поле Cost) на 20 процентов, если заказы были оформлены в течение последнего месяца (условие по полю Date_order).
Кликните здесь для просмотра всего текста
SQL
1
2
UPDATE Purchases SET Cost=Cost*1.20 WHERE 
MONTH(Date_order) = MONTH(getdate()) AND YEAR(Date_order) = YEAR(getdate())

Оператор обработки данных Insert
1. Добавить в таблицу Books новую запись, причем вместо ключевого
поля поставить код (поле Code_book), автоматически увеличенный на единицу от максимального кода в таблице, вместо названия книги (поле Title_book) написать ‘Наука. Техника. Инновации’.
Кликните здесь для просмотра всего текста
SQL
1
2
3
INSERT INTO books(code_book, title_book) 
SELECT MAX(code_book) + 1, 'Наука. Техника. Инновации' 
FROM books

2. Добавить в таблицу Publish_house новую запись, причем вместо ключевого поля поставить код (поле Code_publish), автоматически увеличенный на единицу от максимального кода в таблице, вместо названия го-
рода – ‘Москва’ (поле City), вместо издательства – ‘Наука’ (поле Publish).
Кликните здесь для просмотра всего текста
SQL
1
2
3
INSERT INTO Publishing_house (Code_publish, Publish, City) 
SELECT MAX(Code_publish) + 1, 'Наука', 'Москва'
FROM books

Оператор обработки данных Delete
1. Удалить из таблицы Purchases все записи, у которых количество книг в заказе (поле Amount) = 0.
Кликните здесь для просмотра всего текста
SQL
1
2
DELETE FROM Purchases
WHERE Amount=0

2. Удалить из таблицы Deliveries все записи, у которых не указан ИНН (поле INN пустое).
Кликните здесь для просмотра всего текста
SQL
1
2
DELETE FROM Deliveries
WHERE INN  IS NULL
Вопрос: Как в Firebird результат sql-запроса выгрузить с условным форматированием в текст. файл?

Уважаемые Коллеги, здравствуйте!

Просьба сильно помочь в Firebird с выгрузкой результата sql-запроса с условным форматированием в текстовый файл...

Вводные:

1. Sql-запросы запускаю чрз прг "Firebird ISQL Tool" (Firebird 3.0.0 Windows Build).

2. Параметры базы:
На команду
connect "базка.fdb" user Юй password ********;
прг "Firebird ISQL Tool"
отвечает мне так:
Server version:
WI-V1.5.3.4870 Firebird 1.5
WI-V1.5.3.4870 Firebird 1.5/tcp (сервер)/P10
WI-V3.0.0.32483 Firebird 3.0/tcp (мой_комп)/P10
Database: ""базка.fdb"", User: Юй


Что сделал:
3. Нашел по моей темке очень близкую темку:
"Как отключить все форматирование при выводе результатов?
Добивает концевыми пробелами и вставляет пустую строку.
isql -user SYSDBA -password masterkey -input test.sql -output test.csv backup-s0"


4. На основе п.3 после коннекта к базке запустил:
input ‘C:\\1.sql’ output ‘C:\\1.txt’ backup-s0;
а Она отвечает:
"
SQL> input ‘C:\\1.sql’ output ‘C:\\1.txt’ backup-s0;

ID
============
3198
. . .

CON>
"

5.
Т.е. запрос-то Она выполнила из внешнего файла, а вот записать результат во внешний текстовый файл Она не хочет,
при этом не ругается, а скромно предлагает что-то сделать дальше:
"
CON>
"


Просьба подсказать:
Что я делаю не так?
Как в моём случае можно результат sql-запроса выгрузить с условным форматированием в текстовый. файл?
(чтобы каждая запись в отдельной строке
и
все поля в рамках одной записи разделялись бы символом ";")
Заранее спасибо за скорый ответ!!!

С уважением, Юй
Ответ:
import fdb

def main():
  conn = fdb.connect(database="базка.fdb", user="Юй", password="********")
  select2csv(conn, r'C:\1.sql', r'C:\1.txt', ';')

def select2csv(conn, ifname, ofname, sep):
  curs = conn.cursor()
  curs.execute(open(ifname).read())
  out = open(ofname, 'w')
  for row in curs:
    print(sep.join(('%s' % v).strip() for v in row()), file=out)
Вопрос: SQL запрос с выбором

Привет форумчане, прошу помощи у Вас)
Вот даны 2 таблицы:

Авторы:
Код автора
ФИО

Книга:
Автор
Цена
Название

Нужно создать SQL запрос "Вывести все авторов и их самую дорогую книгу".
Пытался сам, но не вышло нечего. Гугл тоже молчит.

Вывести цену от большего к меньшему:
SQL
1
2
3
4
SELECT Автор.ФИО, Книга.Название, Книга.Цена
FROM Автор, Книга
WHERE Автор.Код Автора=Книга.Автор
ORDER BY Книга.Цена DESC;
Вывести топовую цену:
SQL
1
2
3
4
SELECT Автор.ФИО, Книга.Название,TOP 1 Книга.Цена
FROM Автор, Книга
WHERE Автор.Код Автора=Книга.Автор
ORDER BY Книга.Цена DESC;
Help pleas
Ответ:
Сообщение от iCortezik
SQL запрос "Вывести все авторов и их самую дорогую книгу"
Если нигде не перепутал имена, то можно таким запросом
SQL
1
2
3
4
5
6
7
SELECT Авторы.ФИО, w.Название, w.Цена AS МаксимальнаяЦена
FROM Авторы LEFT JOIN 
   (SELECT Книга.Название, Книга.Цена, Книга.Автор
   FROM Книга INNER JOIN 
   (SELECT Автор, MAX(Цена) AS mx FROM Книга GROUP BY Автор) q1 
   ON Книга.Автор=q1.Автор AND Книга.Цена=q1.mx) w
ON Авторы.[Код автора]=w.Автор
Вопрос: SQL запрос с транспонированием

Всем доброго времени суток!

Есть таблица emp
с числовыми полями U1, F1 и полем DT (дата), см скриншот.

нужно составить SQL-запрос так, чтобы значения столбца DT для записей каждой из пар U1, F1 транспонировались бы в строку с динамическим добавлением полей DT (DT_1, DT_2 ... DT_N), в результате должна получиться таблица result как на скриншоте.

пробовал смотреть в сторону Pivot, но пока не очень получается.
Подскажите пожалуйста как такое написать!

К сообщению приложен файл. Размер - 55Kb
Ответ:
-Практикант-
Miko_v, ещё такой вариант (одним запросом)
TRANSFORM First(DT)
SELECT U1, F1
FROM emp
GROUP BY U1, F1
PIVOT "DT_" & Format(DCount("*","emp","U1=" & U1 & " And F1=" & F1 & 
      " And DT<=" & Format(DT,"\#mm\/dd\/yyyy\#")),"000")

Предполагается, что совокупность полей U1, F1, DT уникальна. Если это не так, то нужно таблицу emp пополнить полем типа счётчик (см. у ПЕНСИОНЕРКА поле Код) и несколько изменить в запросе условие для DCount.


это наверное самое подходящее решение, спасибо Вам большое!
Вопрос: Перехваченый трафик в SQL-запрос

Есть перехваченый Wireshark'ом SQL-запрос. Т.к. запрос большой он состоит из нескольких пакетов. С первым пакетом все нормально, его можно прямо с Wireshark'а просто копировать и будет готовый SQL-запрос вида SELECT * FROM T WHERE C1 = 1 и т.д. А вот следующие пакеты идут как "TDS continuation" и текст Wireshark'ом уже нормально не распознаётся, всё идет через точки:
типа такого
.A.N.D. .(.c.a.s.e. .w.h.e.n. .r.e.q...d.8.5.1. .i.s. .n.o.t. .n.u.l.l. .t.h.e.n. .1.0. .e.l.s.e. .1.2. .e.n.d.

Подскажите pls. как перевести это в нормальный вид.
Ответ: Вопрос Вопросов,

полагаю, что разработчиков такие вопросы не интересуют и они используют другие инструменты для мониторинга запросов.