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

Откуда:
Сообщений: 23
Добрый день! Начинаю пользоваться SQL. Проблема как написать условие по двум параметрам в хранимой процедуре.

Есть количество километров и есть количество часов

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

км = 0, часы = 1 сумма попала по часам

часы = 0, км = 1 сумма попала по км

и присвоить в колонку prm_km_or_watch

SELECT Sum(j.j_sum) as sum1,a.ag_id,
(SELECT top 1 d.doc_date From Documents d inner join journal j on d.doc_id=j.doc_id

Where (j.acc_db in (364,36)) AND (d.ord_id=@ord)
Order by d.doc_date Desc) as date1,
(SELECT top 1 d.doc_date From Documents d inner join journal j on d.doc_id=j.doc_id

Where (j.acc_db in (364,36)) AND (d.ord_id=@ord)
Order by d.doc_date) as date2,

p.prm_string,p1.prm_string as prm_string1, p2.prm_string as prm_string2,p2.prm_string/1.2 as prm_BEZNDS, o1.obj_name, d.doc_no, d.doc_id into #a
From Documents d inner join journal j on d.doc_id=j.doc_id
inner join agents a on a.ag_id=j.j_ag1

inner join objects o1 on o1.obj_id=j.j_obj
inner join doc_params p on p.doc_id=d.doc_id
inner join doc_params p1 on p.doc_id=p1.doc_id
inner join doc_params p2 on p.doc_id=p2.doc_id
WHERE (j.acc_db in (364,36)) AND (d.ord_id=@ord) and p.prm_id=29 and p1.prm_id=30 and p2.prm_id=31
group by a.ag_id,p.prm_string,p1.prm_string,p2.prm_string, o1.obj_name, d.doc_no, d.doc_id

этот пареметр prm_string2

SELECT p.prm_string as prm_string3,p1.prm_string as prm_string4, d.doc_no, d.doc_id into #b
From Documents d inner join journal j on d.doc_id=j.doc_id

inner join doc_params p on p.doc_id=d.doc_id
inner join doc_params p1 on p.doc_id=p1.doc_id
WHERE (j.acc_db in (364,36)) AND (d.ord_id=@ord) and p.prm_id=32 and p1.prm_id=33


этот пареметр prm_string3
6 апр 12, 11:52    [12374896]     Ответить | Цитировать Сообщить модератору
 Re: как написать условие  [new]
kDnZP
Member [заблокирован]

Откуда: ★[msg=16399436]★[msg=20850760]
Сообщений: 11289
Сергей Андр,

SELECT  SUM(j.j_sum) AS sum1 ,
        a.ag_id ,
        ( SELECT TOP 1
                    d.doc_date
          FROM      Documents d
                    INNER JOIN journal j ON d.doc_id = j.doc_id
          WHERE     ( j.acc_db IN ( 364, 36 ) )
                    AND ( d.ord_id = @ord )
          ORDER BY  d.doc_date DESC
        ) AS date1 ,
        ( SELECT TOP 1
                    d.doc_date
          FROM      Documents d
                    INNER JOIN journal j ON d.doc_id = j.doc_id
          WHERE     ( j.acc_db IN ( 364, 36 ) )
                    AND ( d.ord_id = @ord )
          ORDER BY  d.doc_date
        ) AS date2 ,
        p.prm_string ,
        p1.prm_string AS prm_string1 ,
        p2.prm_string AS prm_string2 ,
        p2.prm_string / 1.2 AS prm_BEZNDS ,
        o1.obj_name ,
        d.doc_no ,
        d.doc_id
INTO    #a
FROM    Documents d
        INNER JOIN journal j ON d.doc_id = j.doc_id
        INNER JOIN agents a ON a.ag_id = j.j_ag1
        INNER JOIN objects o1 ON o1.obj_id = j.j_obj
        INNER JOIN doc_params p ON p.doc_id = d.doc_id
        INNER JOIN doc_params p1 ON p.doc_id = p1.doc_id
        INNER JOIN doc_params p2 ON p.doc_id = p2.doc_id
WHERE   ( j.acc_db IN ( 364, 36 ) )
        AND ( d.ord_id = @ord )
        AND p.prm_id = 29
        AND p1.prm_id = 30
        AND p2.prm_id = 31
GROUP BY a.ag_id ,
        p.prm_string ,
        p1.prm_string ,
        p2.prm_string ,
        o1.obj_name ,
        d.doc_no ,
        d.doc_id

--этот пареметр prm_string2 

SELECT  p.prm_string AS prm_string3 ,
        p1.prm_string AS prm_string4 ,
        d.doc_no ,
        d.doc_id
INTO    #b
FROM    Documents d
        INNER JOIN journal j ON d.doc_id = j.doc_id
        INNER JOIN doc_params p ON p.doc_id = d.doc_id
        INNER JOIN doc_params p1 ON p.doc_id = p1.doc_id
WHERE   ( j.acc_db IN ( 364, 36 ) )
        AND ( d.ord_id = @ord )
        AND p.prm_id = 32
        AND p1.prm_id = 33 

Немного непонятно, вам второй запрос чтоль приджейнить подзапросом к основному по d.doc_no , d.doc_id нужно иль что-то иное? Т.е. по постановке задачи я нифига не понял, если честно.
6 апр 12, 12:03    [12374996]     Ответить | Цитировать Сообщить модератору
 Re: как написать условие  [new]
Сергей Андр
Member

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

если параметр prm_string3 > 0 (какая то сумма) то попадает в #a.prm_km_or_watch

если если параметр prm_string3 < 0 (какая то сумма) то не попадает в #a.prm_km_or_watch

если параметр prm_string2 > 0 ( какая то сумма) то попадает в #a.prm_km_or_watch

если параметр prm_string2 < 0 ( какая то сумма) то попадает в #a.prm_km_or_watch

вот вся хранимая процедура:

USE [skandik_yug]
GO
/****** Object: StoredProcedure [dbo].[i_akt_ch]
SET QUOTED_IDENTIFIER ON
GO
ALTER PROCEDURE [dbo].[i_akt_ch]

@ord As int

AS

SELECT Sum(j.j_sum) as sum1,a.ag_id,
(SELECT top 1 d.doc_date From Documents d inner join journal j on d.doc_id=j.doc_id

Where (j.acc_db in (364,36)) AND (d.ord_id=@ord)
Order by d.doc_date Desc) as date1,
(SELECT top 1 d.doc_date From Documents d inner join journal j on d.doc_id=j.doc_id

Where (j.acc_db in (364,36)) AND (d.ord_id=@ord)
Order by d.doc_date) as date2,

p.prm_string,p1.prm_string as prm_string1, p2.prm_string as prm_string2,p2.prm_string/1.2 as prm_BEZNDS, o1.obj_name, d.doc_no, d.doc_id into #a
From Documents d inner join journal j on d.doc_id=j.doc_id
inner join agents a on a.ag_id=j.j_ag1

inner join objects o1 on o1.obj_id=j.j_obj
inner join doc_params p on p.doc_id=d.doc_id
inner join doc_params p1 on p.doc_id=p1.doc_id
inner join doc_params p2 on p.doc_id=p2.doc_id
WHERE (j.acc_db in (364,36)) AND (d.ord_id=@ord) and p.prm_id=29 and p1.prm_id=30 and p2.prm_id=31
group by a.ag_id,p.prm_string,p1.prm_string,p2.prm_string, o1.obj_name, d.doc_no, d.doc_id

SELECT p.prm_string as prm_string3,p1.prm_string as prm_string4, d.doc_no, d.doc_id into #b
From Documents d inner join journal j on d.doc_id=j.doc_id

inner join doc_params p on p.doc_id=d.doc_id
inner join doc_params p1 on p.doc_id=p1.doc_id
WHERE (j.acc_db in (364,36)) AND (d.ord_id=@ord) and p.prm_id=32 and p1.prm_id=33

select #a.sum1,#a.ag_id, #a.date2,#a.date1,#a.obj_name,#a.doc_no,#a.prm_string,#a.prm_string1,#a.prm_string2,#b.prm_string3,#b.prm_string4 ,#a.doc_id, #a.prm_BEZNDS, #a.prm_km_or_watch
from #a left join #b on #a.doc_id=#b.doc_id
order by doc_no
drop table #a
6 апр 12, 12:16    [12375123]     Ответить | Цитировать Сообщить модератору
 Re: как написать условие  [new]
kDnZP
Member [заблокирован]

Откуда: ★[msg=16399436]★[msg=20850760]
Сообщений: 11289
Сергей Андр,
1. освойте тег SRC
2. у вас данные собираются в две временные таблицы, которые потом джойнятся тут:
SELECT  #a.sum1 ,
        #a.ag_id ,
        #a.date2 ,
        #a.date1 ,
        #a.obj_name ,
        #a.doc_no ,
        #a.prm_string ,
        #a.prm_string1 ,
        #a.prm_string2 ,
        #b.prm_string3 ,
        #b.prm_string4 ,
        #a.doc_id ,
        #a.prm_BEZNDS ,
        #a.prm_km_or_watch
FROM    #a
        LEFT JOIN #b ON #a.doc_id = #b.doc_id
ORDER BY doc_no

Вот и пропишите здесь необходимые условия по prm_string2 и prm_string3.
6 апр 12, 12:24    [12375204]     Ответить | Цитировать Сообщить модератору
 Re: как написать условие  [new]
Сергей Андр
Member

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

Не знаю, может быть так

SELECT #a.sum1 ,
#a.ag_id ,
#a.date2 ,
#a.date1 ,
#a.obj_name ,
#a.doc_no ,
#a.prm_string ,
#a.prm_string1 ,
#a.prm_string2 ,
#b.prm_string3 ,
#b.prm_string4 ,
#a.doc_id ,
#a.prm_BEZNDS ,
#a.prm_km_or_watch = a.prm_string2 > 0,
#a.prm_km_or_watch = a.prm_string3 > 0,
FROM #a
LEFT JOIN #b ON #a.doc_id = #b.doc_id
ORDER BY doc_no
6 апр 12, 12:32    [12375284]     Ответить | Цитировать Сообщить модератору
 Re: как написать условие  [new]
kDnZP
Member [заблокирован]

Откуда: ★[msg=16399436]★[msg=20850760]
Сообщений: 11289
Сергей Андр, BOL -> WHERE
* ну может еще будет полезно почитать про CASE и IF
6 апр 12, 12:38    [12375328]     Ответить | Цитировать Сообщить модератору
 Re: как написать условие  [new]
Сергей Андр
Member

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

хоть подскажи где искать ответ
6 апр 12, 12:47    [12375407]     Ответить | Цитировать Сообщить модератору
 Re: как написать условие  [new]
kDnZP
Member [заблокирован]

Откуда: ★[msg=16399436]★[msg=20850760]
Сообщений: 11289
Сергей Андр
kDnZP,

хоть подскажи где искать ответ

http://lmgtfy.com/?q=SQL+Server+Books+Online
6 апр 12, 12:50    [12375429]     Ответить | Цитировать Сообщить модератору
 Re: как написать условие  [new]
Сергей Андр
Member

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

и как мне туда всунуть фразу where

SELECT #a.sum1 ,
#a.ag_id ,
#a.date2 ,
#a.date1 ,
#a.obj_name ,
#a.doc_no ,
#a.prm_string ,
#a.prm_string1 ,
#a.prm_string2 ,
#b.prm_string3 ,
#b.prm_string4 ,
#a.doc_id ,
#a.prm_BEZNDS ,
#a.prm_km_or_watch = a.prm_string2 > 0,
#a.prm_km_or_watch = a.prm_string3 > 0,
FROM #a
LEFT JOIN #b ON #a.doc_id = #b.doc_id
ORDER BY doc_no
6 апр 12, 13:01    [12375533]     Ответить | Цитировать Сообщить модератору
 Re: как написать условие  [new]
Сергей Андр
Member

Откуда:
Сообщений: 23
Сергей Андр,

или это другой строкой написать

where тра та та
6 апр 12, 13:03    [12375546]     Ответить | Цитировать Сообщить модератору
 Re: как написать условие  [new]
Сергей Андр
Member

Откуда:
Сообщений: 23
Сергей Андр,

SELECT #a.sum1 ,
#a.ag_id ,
#a.date2 ,
#a.date1 ,
#a.obj_name ,
#a.doc_no ,
#a.prm_string ,
#a.prm_string1 ,
#a.prm_string2 ,
#b.prm_string3 ,
#b.prm_string4 ,
#a.doc_id ,
#a.prm_BEZNDS ,
#a.prm_km_or_watch = a.prm_string2 > 0,
#a.prm_km_or_watch = a.prm_string3 > 0,
FROM #a
LEFT JOIN #b ON #a.doc_id = #b.doc_id
ORDER BY doc_no
6 апр 12, 13:14    [12375669]     Ответить | Цитировать Сообщить модератору
 Re: как написать условие  [new]
iljy
Member

Откуда:
Сообщений: 8711
Сергей Андр,

тихо сам с собою я веду беседу... А синтаксис посмотреть не судьба?
6 апр 12, 13:30    [12375808]     Ответить | Цитировать Сообщить модератору
 Re: как написать условие  [new]
Сергей Андр
Member

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

Смотрю. Говорю что новичек
6 апр 12, 13:43    [12375932]     Ответить | Цитировать Сообщить модератору
 Re: как написать условие  [new]
Сергей Андр
Member

Откуда:
Сообщений: 23
Сергей Андр,


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

Хочу разобраться
6 апр 12, 13:45    [12375942]     Ответить | Цитировать Сообщить модератору
 Re: как написать условие  [new]
iljy
Member

Откуда:
Сообщений: 8711
Сергей Андр,

ну так разбирайтесь. Правильность синтаксиса запроса гораздо быстрее проверить, попытавшись его выполнить.
6 апр 12, 13:51    [12376009]     Ответить | Цитировать Сообщить модератору
 Re: как написать условие  [new]
Сергей Андр
Member

Откуда:
Сообщений: 23
Сергей Андр,

я не пойму как в select написать что берется из #a.prm_string2 , #b.prm_string3 ,
6 апр 12, 13:51    [12376011]     Ответить | Цитировать Сообщить модератору
 Re: как написать условие  [new]
iap
Member

Откуда: Москва
Сообщений: 47142
Сергей Андр,

SELECT (Transact-SQL)
6 апр 12, 13:53    [12376032]     Ответить | Цитировать Сообщить модератору
 Re: как написать условие  [new]
Сергей Андр
Member

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


SELECT #a.prm_string2 ,#b.prm_string3 так что ли
6 апр 12, 14:00    [12376107]     Ответить | Цитировать Сообщить модератору
 Re: как написать условие  [new]
iap
Member

Откуда: Москва
Сообщений: 47142
Сергей Андр
iap,


SELECT #a.prm_string2 ,#b.prm_string3 так что ли
Там же написано
[ { table_name | view_name | table_alias }. ]
6 апр 12, 14:03    [12376130]     Ответить | Цитировать Сообщить модератору
 Re: как написать условие  [new]
Сергей Андр
Member

Откуда:
Сообщений: 23
iap,
хранимая очень сложная не могу разобраться


и вообще вопрос в том как написать чтоб параметр p1.prm_string as prm_string2 из таблице #a и параметр p.prm_string as prm_string3 из таблице #b попадало:

если параметр prm_string3 > 0 (какая то сумма) то попадает в #a.prm_km_or_watch

если если параметр prm_string3 < 0 (какая то сумма) то не попадает в #a.prm_km_or_watch

если параметр prm_string2 > 0 ( какая то сумма) то попадает в #a.prm_km_or_watch

если параметр prm_string2 < 0 ( какая то сумма) то попадает в #a.prm_km_or_watch


SELECT Sum(j.j_sum) as sum1,a.ag_id,
(SELECT top 1 d.doc_date From Documents d inner join journal j on d.doc_id=j.doc_id

Where (j.acc_db in (364,36)) AND (d.ord_id=@ord)
Order by d.doc_date Desc) as date1,
(SELECT top 1 d.doc_date From Documents d inner join journal j on d.doc_id=j.doc_id

Where (j.acc_db in (364,36)) AND (d.ord_id=@ord)
Order by d.doc_date) as date2,

p.prm_string,p1.prm_string as prm_string1, p2.prm_string as prm_string2,p2.prm_string/1.2 as prm_BEZNDS, p2.prm_string as prm_km, o1.obj_name, d.doc_no, d.doc_id into #a
From Documents d inner join journal j on d.doc_id=j.doc_id
inner join agents a on a.ag_id=j.j_ag1

inner join objects o1 on o1.obj_id=j.j_obj
inner join doc_params p on p.doc_id=d.doc_id
inner join doc_params p1 on p.doc_id=p1.doc_id
inner join doc_params p2 on p.doc_id=p2.doc_id
WHERE (j.acc_db in (364,36)) AND (d.ord_id=@ord) and p.prm_id=29 and p1.prm_id=30 and p2.prm_id=31
group by a.ag_id,p.prm_string,p1.prm_string,p2.prm_string, o1.obj_name, d.doc_no, d.doc_id

SELECT p.prm_string as prm_string3,p1.prm_string as prm_string4, p.prm_string as prm_clock, d.doc_no, d.doc_id into #b
From Documents d inner join journal j on d.doc_id=j.doc_id

inner join doc_params p on p.doc_id=d.doc_id
inner join doc_params p1 on p.doc_id=p1.doc_id
WHERE (j.acc_db in (364,36)) AND (d.ord_id=@ord) and p.prm_id=32 and p1.prm_id=33



select #a.sum1,#a.ag_id, #a.date2,#a.date1,#a.obj_name,#a.doc_no,#a.prm_string,#a.prm_string1,#a.prm_string2,#b.prm_string3,#b.prm_string4 ,#a.doc_id, #a.prm_BEZNDS, #a.prm_km, #b.prm_clock
from #a left join #b on #a.doc_id=#b.doc_id
order by doc_no
drop table #a
6 апр 12, 14:28    [12376357]     Ответить | Цитировать Сообщить модератору
 Re: как написать условие  [new]
kDnZP
Member [заблокирован]

Откуда: ★[msg=16399436]★[msg=20850760]
Сообщений: 11289
Сергей Андр
iap,
хранимая очень сложная не могу разобраться

Ну да, раз тег SRC до сих пор не найден, то навыки поиска не особо хорошие... Думаю отправлять вас в ветку "Работа" тоже бессмысленно, т.к. вы ее скорее всего не найдете.

+
Тег SRC выглядит так: [SRC�]SELECT 1[/SRC]
6 апр 12, 14:57    [12376631]     Ответить | Цитировать Сообщить модератору
 Re: как написать условие  [new]
Сергей Андр
Member

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

хранимая очень сложная не могу разобраться


и вообще вопрос в том как написать чтоб параметр p1.prm_string as prm_string2 из таблице #a и параметр p.prm_string as prm_string3 из таблице #b попадало:

если параметр prm_string3 > 0 (какая то сумма) то попадает в #a.prm_km_or_watch

если если параметр prm_string3 < 0 (какая то сумма) то не попадает в #a.prm_km_or_watch

если параметр prm_string2 > 0 ( какая то сумма) то попадает в #a.prm_km_or_watch

если параметр prm_string2 < 0 ( какая то сумма) то попадает в #a.prm_km_or_watch

SELECT Sum(j.j_sum) as sum1,a.ag_id,
(SELECT top 1 d.doc_date From Documents d inner join journal j on d.doc_id=j.doc_id

Where (j.acc_db in (364,36)) AND (d.ord_id=@ord)
Order by d.doc_date Desc) as date1,
(SELECT top 1 d.doc_date From Documents d inner join journal j on d.doc_id=j.doc_id

Where (j.acc_db in (364,36)) AND (d.ord_id=@ord)
Order by d.doc_date) as date2,

p.prm_string,p1.prm_string as prm_string1, p2.prm_string as prm_string2,p2.prm_string/1.2 as prm_BEZNDS, p2.prm_string as prm_km, o1.obj_name, d.doc_no, d.doc_id into #a
From Documents d inner join journal j on d.doc_id=j.doc_id
inner join agents a on a.ag_id=j.j_ag1

inner join objects o1 on o1.obj_id=j.j_obj
inner join doc_params p on p.doc_id=d.doc_id
inner join doc_params p1 on p.doc_id=p1.doc_id
inner join doc_params p2 on p.doc_id=p2.doc_id
WHERE (j.acc_db in (364,36)) AND (d.ord_id=@ord) and p.prm_id=29 and p1.prm_id=30 and p2.prm_id=31
group by a.ag_id,p.prm_string,p1.prm_string,p2.prm_string, o1.obj_name, d.doc_no, d.doc_id

SELECT p.prm_string as prm_string3,p1.prm_string as prm_string4, p.prm_string as prm_clock, d.doc_no, d.doc_id into #b
From Documents d inner join journal j on d.doc_id=j.doc_id

inner join doc_params p on p.doc_id=d.doc_id
inner join doc_params p1 on p.doc_id=p1.doc_id
WHERE (j.acc_db in (364,36)) AND (d.ord_id=@ord) and p.prm_id=32 and p1.prm_id=33



select #a.sum1,#a.ag_id, #a.date2,#a.date1,#a.obj_name,#a.doc_no,#a.prm_string,#a.prm_string1,#a.prm_string2,#b.prm_string3,#b.prm_string4 ,#a.doc_id, #a.prm_BEZNDS, #a.prm_km, #b.prm_clock
from #a left join #b on #a.doc_id=#b.doc_id
order by doc_no
drop table #a 
6 апр 12, 15:01    [12376666]     Ответить | Цитировать Сообщить модератору
 Re: как написать условие  [new]
kDnZP
Member [заблокирован]

Откуда: ★[msg=16399436]★[msg=20850760]
Сообщений: 11289
Блин, это какой-то праздник сегодня...
Сергей Андр, вы синтаксис SELECT изучили? Про WHERE [, CASE, IF] прочитали?

Намек:
+
DECLARE @a TABLE (id int, a int)
INSERT INTO @a
        ( id, a )
SELECT 1, 2 UNION ALL SELECT 1, 3 UNION ALL SELECT 1, 0

DECLARE @b TABLE (id int, b int)
INSERT INTO @b
        ( id, b )
SELECT 1, 5 UNION ALL SELECT 1, 0 UNION ALL SELECT 1, 7


SELECT * FROM @a a
JOIN @b b ON a.id = b.id
WHERE a.a>0 AND b.b>0
6 апр 12, 15:13    [12376801]     Ответить | Цитировать Сообщить модератору
 Re: как написать условие  [new]
Сергей Андр
Member

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

Язык запросов SQL - учебный курс под ред Андон Ф., Резниченко В

изучаю :)

спасибо!
6 апр 12, 15:20    [12376864]     Ответить | Цитировать Сообщить модератору
 Re: как написать условие  [new]
Сергей Андр
Member

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

и что это мне даёт?
6 апр 12, 15:24    [12376900]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: [1] 2   вперед  Ctrl      все
Все форумы / Microsoft SQL Server Ответить