|
|
|
| Доброго времени суток
имеется запрос вида
SELECT a1.*
FROM Таблица1 as a1
WHERE a1.Выражение1=5
При таком раскладе если записей удовлетворяющих условию нет - то запрос выведет 0 строк
Нужно что бы
при условии что записей 0 - вывел строку и в одном поле поставил 0
как сделать на SQl не знаю
Заранее спасибо | |
|
| |
|
|
|
| если ты дружишь с DAO или с ADO
то проблем нет., а поможет рекордсет.
=======================================
или так :(Другой вариант)
Заводишь таблицу, в которую будешь заносить результаты запроса.
выплняешь свой запрос на добавление записей и поверяешь кол-во записей., если = 0
создаёшь одну строку в этой таблице - заранее созданным на этот случай запросом на добавление одной записи с нужными данными.
-----------------------------------------------
то есть вместо запроса используем таблицу.
В принципе это одно и тоже - набор записей.
=======================================
есть второй вариант.
если табла, с которой ты сейчас работаешь используется тока для этих целей - заведи там служебную строуц, в которой, если не будет записей по условию в запросе, зафигачить это условие в эту командную строку и повторить запрос, тогда выйдет именно одна строка.
Перед запуском первого запроса очищаем служебное поле условия отбора в служебной этой строке. | |
|
| |
|
|
|
| Дело в том что это кусочек запроса 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
|
| |
|
| |
|
|
|
| Может ты не въехал в то, что я написал?
------------------------------------------------------------
То что я описал будет выдавать результат, что тебе как раз и нужен.
==================================
если например внеплановых нет
то запрос выдаст
плановые .........
внеплановые .... 0 (служебная строка)
рейдовые........
или выдаст так:
плановые ......... 0 (служебная строка)
внеплановые .... 0 (служебная строка)
рейдовые........
или выдаст так:
плановые ......... 0 (служебная строка)
внеплановые .... 0 (служебная строка)
рейдовые........ 0 (служебная строка)
тебе надо только программно добавить служебную строку с нужным условием в поле выборки,
а именно или это слово = плановые
а именно или это слово = внеплановые
а именно или это слово = рейдовые
И в поле значение в этой строке поставить значение = 0
==================================================
И это всё в твоей таблице, из которой затем запросом формируешь любой требуемый отчёт. | |
|
| |
|
|
|
| а если использовать 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 - мы выводим все Тип.
т.е. твой запрос нужно "прикрутить" к другому запросу у которого источник твоя табла где хранится твое поле "плановые", "рейдовые" ...... | |
|
| |
|
|
|
| о - точно
спасибо други - направили тормоза в нужную сторону | |
|
| |
|
|
|
| Получилось как-то так
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.[Вид проверки]
|
создал доп таблу ВидПроверкиДляЕженед куда закинул данные из массива
еще раз спасибо | |
|
| |
|
|
|
| может я не въехал в вопрос?? | |
|
| |
|
|
|
| а почему "создал доп. таблицу"?
- это раньше надо делать полеСосписком и Табла где хранится эта инфа. | |
|
| |
|