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

Откуда: ru
Сообщений: 355
Так второй запрос пишется
ниже, а как сделать чтобы он добавился как столбцы?
Заранее благодарю.

select b.NAME_PRED, a.pr_rab, sum(c.pr_rab) as pr_rab--, a.pr_spec, a.pr_slug,a.gptu, a.shco, a.NEPR_SHCO,a.PR_RUK, a.pr_sovm12, a.nepr_sovm16, a.NEPR_RAB, a.NEPR_RUK, a.nepr_sovm13, a.pr_sovm15,a.NESPISOCH
from CHISLEN a, pred b, structur_otiz c
where b.SHIFR_PRED=a.PREDPR and b.SHIFR_PRED=c.PREDPR and
c.god= a.god and c.god= '2004' and c.mes= a.mes and c.mes='10' and
isnull(b.vyvod, '2060-01-01')>'2004-10-27' and b.vvod-1<'2004-10-27'
and c.kvo in (select po_tarify_100 from sprvxod)
group by b.NAME_PRED, a.pr_rab
union
select b.NAME_PRED, a.pr_rab, sum(c.pr_rab) as pr_rab1--, a.pr_spec, a.pr_slug,a.gptu, a.shco, a.NEPR_SHCO,a.PR_RUK, a.pr_sovm12, a.nepr_sovm16, a.NEPR_RAB, a.NEPR_RUK, a.nepr_sovm13, a.pr_sovm15,a.NESPISOCH
from CHISLEN a, pred b, structur_otiz c
where b.SHIFR_PRED=a.PREDPR and b.SHIFR_PRED=c.PREDPR and
c.god= a.god and c.god= '2004' and c.mes= a.mes and c.mes='10' and
isnull(b.vyvod, '2060-01-01')>'2004-10-27' and b.vvod-1<'2004-10-27'
and c.kvo in (select sovm_rash from sprvxod)
group by b.NAME_PRED, a.pr_rab
17 май 05, 10:58    [1546416]     Ответить | Цитировать Сообщить модератору
 Re: как объеденить два запроса не построчно а постолбно?  [new]
Smirnov Anton
Member

Откуда: Н.Новгород
Сообщений: 3220
единственный, ИМХО, способ, это у каждого запроса сделать сквозную нумерацию строк, а потом full join по этим номерам
17 май 05, 11:04    [1546452]     Ответить | Цитировать Сообщить модератору
 Re: как объеденить два запроса не построчно а постолбно?  [new]
Glory
Member

Откуда:
Сообщений: 104760
Как связаны structur_otiz и sprvxod ? 1-1 или 1-М ?
17 май 05, 11:16    [1546550]     Ответить | Цитировать Сообщить модератору
 Re: как объеденить два запроса не построчно а постолбно?  [new]
programmator
Member

Откуда: ru
Сообщений: 355
связи нет
набор из sprVvod участвует в условии при подсчете суммы из structur_otiz
17 май 05, 11:29    [1546633]     Ответить | Цитировать Сообщить модератору
 Re: как объеденить два запроса не построчно а постолбно?  [new]
Smirnov Anton
Member

Откуда: Н.Новгород
Сообщений: 3220
первый мой пост - для общего случая
но в конкретном может получиться и проще
необходимо осознать, что необходимо каким то образом установить биекцию между двумя наборами(что пытается сделать Glory), то есть взаимно однозначное соответсвие(ну некоторые могут и не найти соответсвия, если кол-во строк разное), а потом по этому соответсвию сделать соединение
просто так придляпать справа второй набор не удасться, так как этой операции нет в реляционной алгебре
те необходимо либо найти реальное соответсвии, либо сделать искусственно, как было предложено в первом посте
17 май 05, 11:35    [1546658]     Ответить | Цитировать Сообщить модератору
 Re: как объеденить два запроса не построчно а постолбно?  [new]
Glory
Member

Откуда:
Сообщений: 104760
Если связи нет то как понимать условия
and c.kvo in (select po_tarify_100 from sprvxod)
и
and c.kvo in (select sovm_rash from sprvxod)
17 май 05, 11:36    [1546663]     Ответить | Цитировать Сообщить модератору
 Re: как объеденить два запроса не построчно а постолбно?  [new]
programmator
Member

Откуда: ru
Сообщений: 355
это набор данных из 1 запроса
КС 2.00 790.90
ЭН.СБЫТ 62.00 168851.46
УЭС 97.00 320529.23
ПТЭС 248.00 702144.47
ТЭЦ - 3 259.00 930178.63
УВВС 298.00 1113418.32
ТЭЦ - 2 305.00 1091779.62
ТЭЦ - 1 454.00 1547628.21
УТВГС 496.00 1506858.30

это из 2го
ЭН.СБЫТ 62.00 305.00
УЭС 97.00 30926.60
ПТЭС 248.00 42890.26
ТЭЦ - 3 259.00 59190.84
УВВС 298.00 82862.65
ТЭЦ - 2 305.00 81656.89
ТЭЦ - 1 454.00 141181.99
УТВГС 496.00 113866.39

надо в итоге получить
КС 2.00 790.90 null
ЭН.СБЫТ 62.00 168851.46 305.00
УЭС 97.00 320529.23 30926.60
ПТЭС 248.00 702144.47 42890.26
ТЭЦ - 3 259.00 930178.63 59190.84
УВВС 298.00 1113418.32 82862.65
ТЭЦ - 2 305.00 1091779.62 81656.89
ТЭЦ - 1 454.00 1547628.21 141181.99
УТВГС 496.00 1506858.30 113866.39

реально ли это?
17 май 05, 13:11    [1547231]     Ответить | Цитировать Сообщить модератору
 Re: как объеденить два запроса не построчно а постолбно?  [new]
Roman S. Golubin
Member

Откуда: 140002
Сообщений: 11541
programmator
это набор данных из 1 запроса
КС 2.00 790.90
ЭН.СБЫТ 62.00 168851.46

это из 2го
ЭН.СБЫТ 62.00 305.00

надо в итоге получить
КС 2.00 790.90 null
ЭН.СБЫТ 62.00 168851.46 305.00

реально ли это?


Объединяй через left join вместо union.

--
WBR, Roman S. Golubin
17 май 05, 13:14    [1547254]     Ответить | Цитировать Сообщить модератору
 Re: как объеденить два запроса не построчно а постолбно?  [new]
Glory
Member

Откуда:
Сообщений: 104760
programmator

реально ли это?

А вы на вопросы отвечать умеете ? Или только задавать ?
17 май 05, 13:16    [1547266]     Ответить | Цитировать Сообщить модератору
 Re: как объеденить два запроса не построчно а постолбно?  [new]
Roman S. Golubin
Member

Откуда: 140002
Сообщений: 11541
[quot Roman S. GolubinОбъединяй через left join вместо union.[/quot]

Примерно так:

select A.aa, A.ab, A.pr_rab, B.pr_rab1
from (
select b.NAME_PRED aa, a.pr_rab ab, sum(c.pr_rab) as pr_rab--, a.pr_spec, a.pr_slug,a.gptu, a.shco, a.NEPR_SHCO,a.PR_RUK, a.pr_sovm12, a.nepr_sovm16, a.NEPR_RAB, a.NEPR_RUK, a.nepr_sovm13, a.pr_sovm15,a.NESPISOCH
from CHISLEN a, pred b, structur_otiz c
where b.SHIFR_PRED=a.PREDPR and b.SHIFR_PRED=c.PREDPR and
c.god= a.god and c.god= '2004' and c.mes= a.mes and c.mes='10' and
isnull(b.vyvod, '2060-01-01')>'2004-10-27' and b.vvod-1<'2004-10-27'
and c.kvo in (select po_tarify_100 from sprvxod)
group by b.NAME_PRED, a.pr_rab) A
left join
(select b.NAME_PRED qq, a.pr_rab qt, sum(c.pr_rab) as pr_rab1--, a.pr_spec, a.pr_slug,a.gptu, a.shco, a.NEPR_SHCO,a.PR_RUK, a.pr_sovm12, a.nepr_sovm16, a.NEPR_RAB, a.NEPR_RUK, a.nepr_sovm13, a.pr_sovm15,a.NESPISOCH
from CHISLEN a, pred b, structur_otiz c
where b.SHIFR_PRED=a.PREDPR and b.SHIFR_PRED=c.PREDPR and
c.god= a.god and c.god= '2004' and c.mes= a.mes and c.mes='10' and
isnull(b.vyvod, '2060-01-01')>'2004-10-27' and b.vvod-1<'2004-10-27'
and c.kvo in (select sovm_rash from sprvxod)
group by b.NAME_PRED, a.pr_rab) B
on (A.aa = B.qq)
17 май 05, 13:19    [1547277]     Ответить | Цитировать Сообщить модератору
 Re: как объеденить два запроса не построчно а постолбно?  [new]
programmator
Member

Откуда: ru
Сообщений: 355
Roman S. Golubin
а как -это рименить left join вместо union
17 май 05, 13:20    [1547280]     Ответить | Цитировать Сообщить модератору
 Re: как объеденить два запроса не построчно а постолбно?  [new]
programmator
Member

Откуда: ru
Сообщений: 355
sorry уже вижу спасибо щас попробую
17 май 05, 13:21    [1547285]     Ответить | Цитировать Сообщить модератору
 Re: как объеденить два запроса не построчно а постолбно?  [new]
programmator
Member

Откуда: ru
Сообщений: 355
Roman S. Golubin - Вы гений
огромное спасибо
17 май 05, 13:24    [1547315]     Ответить | Цитировать Сообщить модератору
 Re: как объеденить два запроса не построчно а постолбно?  [new]
Glory
Member

Откуда:
Сообщений: 104760
programmator
sorry уже вижу спасибо щас попробую

Запрос избыточен ибо почти полностью дублирует себя. Его можно упростить
17 май 05, 13:27    [1547334]     Ответить | Цитировать Сообщить модератору
 Re: как объеденить два запроса не построчно а постолбно?  [new]
programmator
Member

Откуда: ru
Сообщений: 355
00:00:03
быстрее нет смысла
17 май 05, 13:30    [1547367]     Ответить | Цитировать Сообщить модератору
 Re: как объеденить два запроса не построчно а постолбно?  [new]
SanyL
Member

Откуда: Москва
Сообщений: 4540
programmator
00:00:03
быстрее нет смысла


Долго думал что по этому поводу можно сказать! И вот решил спросить: а почему?
17 май 05, 13:34    [1547400]     Ответить | Цитировать Сообщить модератору
 Re: как объеденить два запроса не построчно а постолбно?  [new]
Roman S. Golubin
Member

Откуда: 140002
Сообщений: 11541
SanyL
programmator
00:00:03
быстрее нет смысла


Долго думал что по этому поводу можно сказать! И вот решил спросить: а почему?


Недостаток практики сказывается. По мере увеличения знаний прийдет и осознание.
17 май 05, 13:44    [1547485]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить