Rambler's Top100
Форум: MS ACCESSVBVBA MS OfficeMS SQL server
Новые сообщения: 0000

Форум: MS ACCESS

Вопросы связанные с MS ACCESS

Обновить визитку
Участники «Online»
Все участники

 
 

Доброго времени суток, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Вывод в запросе 1 строки обязательно
 
 автор: snipe   (05.12.2012 в 09:34)   личное сообщение
 
 

Доброго времени суток

имеется запрос вида

SELECT a1.*
FROM Таблица1 as a1
WHERE a1.Выражение1=5

При таком раскладе если записей удовлетворяющих условию нет - то запрос выведет 0 строк
Нужно что бы
при условии что записей 0 - вывел строку и в одном поле поставил 0
как сделать на SQl не знаю

Заранее спасибо

  Ответить  
 
 автор: час   (05.12.2012 в 10:04)   личное сообщение
 
 

если ты дружишь с DAO или с ADO
то проблем нет., а поможет рекордсет.
=======================================
или так :(Другой вариант)
Заводишь таблицу, в которую будешь заносить результаты запроса.
выплняешь свой запрос на добавление записей и поверяешь кол-во записей., если = 0
создаёшь одну строку в этой таблице - заранее созданным на этот случай запросом на добавление одной записи с нужными данными.
-----------------------------------------------
то есть вместо запроса используем таблицу.
В принципе это одно и тоже - набор записей.
=======================================
есть второй вариант.
если табла, с которой ты сейчас работаешь используется тока для этих целей - заведи там служебную строуц, в которой, если не будет записей по условию в запросе, зафигачить это условие в эту командную строку и повторить запрос, тогда выйдет именно одна строка.
Перед запуском первого запроса очищаем служебное поле условия отбора в служебной этой строке.

  Ответить  
 
 автор: snipe   (05.12.2012 в 10:55)   личное сообщение
 
 

Дело в том что это кусочек запроса Union all

форма отчета (на бумаге) имеет вид
плановые .........
внеплановые.....
рейдовые........

т.е. я пытаюсь запросом сформировать таблицу отчета
SELECT a1.*
FROM Таблица1 as a1
WHERE a1.Выражение1="плановые"
union all
SELECT a1.*
FROM Таблица1 as a1
WHERE a1.Выражение1="внеплановые"
union all
SELECT a1.*
FROM Таблица1 as a1
WHERE a1.Выражение1="рейдовые"

если например внеплановых нет
то запрос выдаст

плановые .........
рейдовые........

что не соответствует форме отчета

пока выкрутился так



Dim a(7 To 13) As String
a(7) = "плановые"
a(8) = "внеплановые"
a(9) = "рейдовая"
a(10) = "адм расследования"
a(11) = "привлечение специалистов"
a(12) = "заключения"
a(13) = "адм.дело (по подведомств.)"

dfr.sheets("Табл.1.3 Итог по КНД").Select
Set rs = CurrentDb.OpenRecordset("100_ЕженОтчетЛист1_3")
rs.MoveLast: rs.MoveFirst
For i = 7 To 13
rs.MoveFirst
For j = 1 To rs.RecordCount
If a(i) = rs.Fields(0) Then
        For k = 1 To 9
        dfr.Cells(i, k + 1) = Nz(rs.Fields(k), "")
        Next k
End If
If j < rs.RecordCount Then rs.MoveNext
Next j
Next i

dfr - это excel

но как-то это длинно по сравнению с этим


Set rs = CurrentDb.OpenRecordset("100_ЕженОтчетЛист1_1")
dfr.Cells(7, 2).CopyFromRecordset rs

  Ответить  
 
 автор: час   (05.12.2012 в 11:35)   личное сообщение
 
 

Может ты не въехал в то, что я написал?
------------------------------------------------------------
То что я описал будет выдавать результат, что тебе как раз и нужен.
==================================
если например внеплановых нет
то запрос выдаст

плановые .........
внеплановые .... 0 (служебная строка)
рейдовые........


или выдаст так:
плановые ......... 0 (служебная строка)
внеплановые .... 0 (служебная строка)
рейдовые........

или выдаст так:
плановые ......... 0 (служебная строка)
внеплановые .... 0 (служебная строка)
рейдовые........ 0 (служебная строка)

тебе надо только программно добавить служебную строку с нужным условием в поле выборки,
а именно или это слово = плановые
а именно или это слово = внеплановые
а именно или это слово = рейдовые

И в поле значение в этой строке поставить значение = 0
==================================================
И это всё в твоей таблице, из которой затем запросом формируешь любой требуемый отчёт.

  Ответить  
 
 автор: kot_k_k   (05.12.2012 в 11:44)   личное сообщение
 
 

а если использовать Left jion ?
типа

SELECT Tip.Tip, Tip.Kod_Tip
FROM Tip LEFT JOIN Nam_TMP ON Tip.Kod_Tip = [Nam_TMP].Tip;

а запрос Nam_TMP - построен как пустой.
SELECT Naimen.*
FROM Naimen
WHERE (((Naimen.Kod_N)=-1))

и имея пустой Nam_TMP - мы выводим все Тип.

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

  Ответить  
 
 автор: snipe   (05.12.2012 в 11:56)   личное сообщение
 
 

о - точно
спасибо други - направили тормоза в нужную сторону

  Ответить  
 
 автор: snipe   (05.12.2012 в 12:21)   личное сообщение
 
 

Получилось как-то так

Select a1.*
from
(
SELECT a1.*
 FROM Таблица1 as a1
 WHERE a1.Выражение1="плановые"
 union all
 SELECT a1.*
 FROM Таблица1 as a1
 WHERE a1.Выражение1="внеплановые"
 union all
 SELECT a1.*
 FROM Таблица1 as a1
 WHERE a1.Выражение1="рейдовые"
) as a1 RIGHT JOIN [ВидПроверкиДляЕженед] as a2 ON a1.[Вид проверки] =a2.[Вид проверки]


создал доп таблу ВидПроверкиДляЕженед куда закинул данные из массива

еще раз спасибо

  Ответить  
 
 автор: час   (05.12.2012 в 14:46)   личное сообщение
 
 

может я не въехал в вопрос??

  Ответить  
 
 автор: kot_k_k   (05.12.2012 в 16:17)   личное сообщение
 
 

а почему "создал доп. таблицу"?
- это раньше надо делать полеСосписком и Табла где хранится эта инфа.

  Ответить  
 
 автор: snipe   (05.12.2012 в 19:23)   личное сообщение
 
 

потребности в таблице не было т.к. данные разовые (если так можно сказать) и используются только в одном месте - в этом чертовом отчете
(когда начальство придумывало этот отчет я в больнице валялся и соответственно вставить весткое слово не смог - до сих пор мне его делать не приходилось, я не заморачивался
а тут свалился как снег на голову) вообщем названия строк отчета не совсем такие - какие данные используются в базе данных. Это как дата хочу напишу так 05.12.2012 а хочу так 5.12.12 или так
5.12.2012г.
насчет таблицы может быть поторопился - завтра попробую примерно так



Select a3.* 
from 

SELECT a1.* 
 FROM Таблица1 as a1 
 WHERE a1.Выражение1="плановые" 
 union all 
 SELECT a1.* 
 FROM Таблица1 as a1 
 WHERE a1.Выражение1="внеплановые" 
 union all 
 SELECT a1.* 
 FROM Таблица1 as a1 
 WHERE a1.Выражение1="рейдовые" 

as a3 RIGHT JOIN 
(
select "плановые" as dc from S_link
union all
select "внеплановые" as dc from S_link
union all
select "рейдовые" as dc from S_link
) as a2 
ON a3.[Вид проверки] =a2.dc

S_link - это табла в базе с одной записью
и таблу ВидПроверкиДляЕженед можно будет изничтожить

просто мозги сегодня поплыли и перестали думать конструктивно
пойду коньячка налью
и еще раз скажу Спасибо
(иногда шаг вперед это результат пинка взад)

  Ответить  
HiProg.com - Технологии программирования
Rambler's Top100 TopList